"""Root pages: dashboards (internal vs client), healthcheck."""

from datetime import datetime, timezone

from fastapi import APIRouter, Request
from fastapi.responses import HTMLResponse, RedirectResponse

from db import query
from deps import current_user, render

router = APIRouter()


@router.get("/healthz")
def healthz() -> dict:
    return {"ok": True, "ts": datetime.now(timezone.utc).isoformat()}


@router.get("/", response_class=HTMLResponse)
def root(request: Request):
    user = current_user(request)
    if user is None:
        return RedirectResponse("/login", status_code=303)
    if user.is_internal:
        orgs = query(
            """SELECT o.id, o.name, o.kind,
                      (SELECT COUNT(*) FROM client c WHERE c.organization_id = o.id) AS n_clients
               FROM organization o ORDER BY o.name"""
        )
        clients = query(
            """SELECT c.id, c.name, c.primary_url, c.status, o.name AS org_name
               FROM client c JOIN organization o ON o.id = c.organization_id
               ORDER BY c.created_at DESC LIMIT 50"""
        )
        return render("dashboard_internal.html", user=user, orgs=orgs, clients=clients)
    reports = query(
        """SELECT r.id, r.title, r.status, r.sent_to_client_at, r.approved_at,
                  c.id AS client_id, c.name AS client_name, c.primary_url
           FROM report r
           JOIN client c ON c.id = r.client_id
           JOIN user_client_access uca ON uca.client_id = c.id
           WHERE uca.user_id = ?
             AND r.status IN ('sent','in_review','approved','implementing','done')
           ORDER BY r.sent_to_client_at DESC""",
        (user.id,),
    )
    return render("dashboard_client.html", user=user, reports=reports)
