"""A RENDSZERADMIN DASHBOARD (2026-10-05, v30) - az /rendszeradmin oldal és a kártya-kapcsolók.
Részletes leírás Miklósnak és a jövőbeli fejlesztőknek: docs/RA_DASHBOARD.md

MIT CSINÁL?
    GET  /rendszeradmin                              - a dashboard: kártyák (cégek, felhasználók, 2FA, levelezés, tiltások, rendszer)
                                                       + az "Aktív problémák" kártya. CSAK OLVAS (a GET nem írhat: docs/GET_ATTEKINTES.md).
    POST /rendszeradmin/dashboard/kartya/{kulcs}      - egy kártya ki/be kapcsolása a bejelentkezett rendszeradminnak
                                                       (mezo: aktiv=true|false; a common.js `toggle-post` kapcsolója hívja).

Az adatok összeállítása és a kapcsolók tárolása a ra_dashboard_utils.py-ban van - ez a fájl csak a HTTP-réteg.
A Cégek oldal (/rendszeradmin/cegek) érintetlen marad: a dashboard csak egy új "főoldal" előtte.
"""
from fastapi import APIRouter, Request, Depends, Form
from fastapi.responses import HTMLResponse, RedirectResponse, JSONResponse
from sqlalchemy.orm import Session

import models
import ra_dashboard_utils as dash
from database import get_db
from security import get_current_user, is_rendszeradminisztrator
from templates_env import templates
from verzio_utils import jelenlegi_verzio
from routers.rendszeradmin_mfa import _idegen_eredet           # ugyanaz a Sec-Fetch-Site CSRF-védelem, mint a többi RA műveletnél

router = APIRouter()

# Melyik kártya melyik problémakategória legrosszabb szintjét mutatja a keretszínében (a kártyán nincs külön lista,
# csak a szín: piros / sárga / zöld). A "cegek" és a "felhasznalok" kártya semleges (kék).
KARTYA_KATEGORIA = {
    "ketlepcsos": "ketlepcsos",
    "levelezes": "levelezes",
    "tiltasok": "belepes",
    "rendszer": "rendszer",
}


@router.get("/rendszeradmin", response_class=HTMLResponse)
def rendszeradmin_dashboard(
    request: Request,
    db: Session = Depends(get_db),
    current_user: models.User = Depends(get_current_user)
):
    if not is_rendszeradminisztrator(current_user):
        return RedirectResponse(url="/valassz-modult", status_code=303)

    adat = dash.osszeallit(db)

    # kártyánként a legrosszabb szint (piros > sárga > zöld) - az "info" tétel nem rontja a színt
    szintek = {}
    for kulcs, kategoria in KARTYA_KATEGORIA.items():
        tetelek = [t["szint"] for t in adat["problemak"] if t["kategoria"] == kategoria]
        szintek[kulcs] = "piros" if "piros" in tetelek else ("sarga" if "sarga" in tetelek else "rendben")

    return templates.TemplateResponse(
        request=request,
        name="rendszeradmin_dashboard.html",
        context={
            "user": current_user,
            "adatok": adat["adatok"],
            "problemak": adat["problemak"],
            "naplo": adat["naplo"],
            "osszesito": adat["osszesito"],
            "kartyak": dash.KARTYAK,
            "rejtett": dash.rejtett_kartyak(db, current_user),
            "kartya_szint": szintek,
            "verzio": jelenlegi_verzio(),
        }
    )


@router.post("/rendszeradmin/dashboard/kartya/{kulcs}")
def kapcsol_dashboard_kartya(
    kulcs: str,
    request: Request,
    aktiv: str = Form(""),
    db: Session = Depends(get_db),
    current_user: models.User = Depends(get_current_user)
):
    """Egy kártya megjelenítése (aktiv=true) vagy elrejtése (aktiv=false). Az "Aktív problémák" kártya nem kapcsolható
    (nincs a katalógusban -> 404). A válasz JSON, mert a common.js `toggle-post` kapcsolója hívja."""
    if not is_rendszeradminisztrator(current_user):
        return JSONResponse(status_code=403, content={"message": "Csak a rendszeradminisztrátor!"})
    if _idegen_eredet(request):
        return JSONResponse(status_code=403, content={"message": "A kérés nem erről az oldalról érkezett."})
    if current_user.csak_olvasas:
        return JSONResponse(status_code=403, content={"message": "Csak megtekintési jogosultsággal rendelkezel, szerkesztés nem lehetséges!"})
    if aktiv.strip().lower() not in ("true", "false"):
        return JSONResponse(status_code=400, content={"message": "Érvénytelen érték."})

    lathato = aktiv.strip().lower() == "true"
    if not dash.kartya_beallitasa(db, current_user, kulcs, lathato):
        return JSONResponse(status_code=404, content={"message": "Ismeretlen kártya."})
    return JSONResponse(status_code=200, content={"message": "Mentve.", "aktiv": lathato})
