import sys
sys.path.insert(0, "/var/www/html/metafoliadorv2")

from fastapi import APIRouter, Request, Depends, HTTPException
from fastapi.responses import HTMLResponse, RedirectResponse
from jinja2 import Environment, FileSystemLoader
from sqlalchemy.orm import Session

from app.models.main_database import get_main_db
from app.models.main_user import MainUser
from app.models.main_customer import Customer
from app.api.main.auth import get_main_current_user, main_decode_access_token
from app.config import settings

env = Environment(loader=FileSystemLoader("/var/www/html/metafoliadorv2/templates/main"))
env.globals["timezone"] = settings.timezone
router = APIRouter(tags=["main-views"])


def render_main_template(name: str, context: dict) -> HTMLResponse:
    template = env.get_template(name)
    return HTMLResponse(template.render(**context))


def get_main_user_context(user) -> dict:
    return {"name": user.name, "email": user.email}


@router.get("/main/login", response_class=HTMLResponse, summary="Vista: login principal")
async def main_login_page(request: Request, db: Session = Depends(get_main_db)):
    token = request.cookies.get("main_access_token")
    if token:
        payload = main_decode_access_token(token)
        if payload:
            user = db.query(MainUser).filter(
                MainUser.id == payload.get("user_id"),
                MainUser.active == True,
            ).first()
            if user:
                return RedirectResponse(url="/main", status_code=302)
        resp = render_main_template("login.html", {"request": request})
        html_content = resp.body.decode() if isinstance(resp.body, bytes) else str(resp.body)
        resp = HTMLResponse(content=html_content)
        resp.delete_cookie("main_access_token")
        return resp
    return render_main_template("login.html", {"request": request})


@router.get("/main", response_class=HTMLResponse, summary="Vista: dashboard principal")
async def main_dashboard(
    request: Request,
    user: MainUser = Depends(get_main_current_user),
    db: Session = Depends(get_main_db),
):
    customers = db.query(Customer).order_by(Customer.name).all()
    customer_list = [
        {
            "id": c.id,
            "name": c.name,
            "subdomain": c.subdomain,
            "custom_domain": c.custom_domain,
            "active": c.active,
        }
        for c in customers
    ]
    return render_main_template("dashboard.html", {
        "request": request,
        "user": get_main_user_context(user),
        "customers": customer_list,
    })


@router.get("/main/customers", response_class=HTMLResponse, summary="Vista: gestion de clientes")
async def main_customers_page(
    request: Request,
    user: MainUser = Depends(get_main_current_user),
    db: Session = Depends(get_main_db),
):
    customers = db.query(Customer).order_by(Customer.name).all()
    customer_list = [
        {
            "id": c.id,
            "name": c.name,
            "subdomain": c.subdomain,
            "custom_domain": c.custom_domain,
            "active": c.active,
        }
        for c in customers
    ]
    return render_main_template("customers.html", {
        "request": request,
        "user": get_main_user_context(user),
        "customers": customer_list,
        "main_domain": settings.main_domain,
    })


@router.get("/main/usuarios", response_class=HTMLResponse, summary="Vista: gestion de usuarios principales")
async def main_usuarios_page(
    request: Request,
    user: MainUser = Depends(get_main_current_user),
):
    return render_main_template("users.html", {
        "request": request,
        "user": get_main_user_context(user),
    })
