from fastapi import APIRouter, Request, Form, Depends
from fastapi.responses import HTMLResponse, RedirectResponse
from fastapi.templating import Jinja2Templates
from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy import select
from app.core.database import get_db
from app.models.models import VoucherAgent
from app.core.security import require_roles
import os

router = APIRouter(dependencies=[Depends(require_roles("agen_voucher", "admin_cs"))])
BASE_DIR = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
templates = Jinja2Templates(directory=os.path.join(BASE_DIR, "app/templates"))

@router.get("/voucher-agents", response_class=HTMLResponse)
async def voucher_agents(request: Request, db: AsyncSession = Depends(get_db)):
    result = await db.execute(select(VoucherAgent).where(VoucherAgent.is_active == True).order_by(VoucherAgent.area, VoucherAgent.name))
    agents = result.scalars().all()
    return templates.TemplateResponse(request=request, name="voucher_agents.html", context={"agents": agents})

@router.post("/voucher-agents")
async def add_voucher_agent(
    name: str = Form(...),
    phone: str = Form(...),
    area: str = Form(...),
    nama_isp: str = Form(None),
    domain_isp: str = Form(None),
    prefix: str = Form(None),
    db: AsyncSession = Depends(get_db)
):
    db.add(VoucherAgent(
        name=name.strip(),
        phone=phone.strip(),
        area=area.strip(),
        nama_isp=nama_isp.strip() if nama_isp else None,
        domain_isp=domain_isp.strip() if domain_isp else None,
        prefix=prefix.strip() if prefix else None,
        commission_rate=20
    ))
    await db.commit()
    return RedirectResponse(url="/voucher-agents", status_code=303)
