from __future__ import annotations
from typing import List, Dict
from fastapi import APIRouter, Request, Query
from fastapi.responses import HTMLResponse
from app.web.deps import templates, sb, COMPANY_ORDER, TODAY, _date_display_and_compare, _to_int_safe, _normalize_multiline, _norm_company_label

router = APIRouter()

@router.get("/group/executives", response_class=HTMLResponse)
async def group_executives_detail(request: Request, company: str | None = Query(default=None)):
    try:
        # 핵심: 운영 뷰로 전환
        res = sb.table("kepco_org_cur").select("*").limit(10000).execute()
        raw: list[dict] = res.data or []
    except Exception:
        raw = []

    tabs = COMPANY_ORDER[:]
    current = company if company in COMPANY_ORDER else tabs[0]

    def _key(s: str | None) -> str:
        return (s or "").replace(" ","").strip()

    cur_key = _key(current)

    def _matches(dep: str | None) -> bool:
        if not dep: return False
        dep_key = _key(dep)
        if dep_key == cur_key: return True
        norm = _norm_company_label(dep)
        if norm and _key(norm) == cur_key: return True
        return cur_key in dep_key or dep_key in cur_key

    cur_rows = [r for r in raw if _matches(r.get("department"))]
    if not cur_rows and raw:
        cur_rows = [r for r in raw if _key(current) in _key(r.get("department"))]

    enriched: list[dict] = []
    for r in cur_rows:
        task = (r.get("task") or r.get("title") or r.get("position") or "-").strip() or "-"
        start_disp, start_cmp = _date_display_and_compare(r.get("start"))
        end_disp, end_cmp = _date_display_and_compare(r.get("end"))
        expired = bool(end_cmp and end_cmp < TODAY)
        person = {**r, "_task": task, "_start_str": start_disp, "_end_str": end_disp,
                  "_expired": expired, "_career_str": _normalize_multiline(r.get("career"))}
        enriched.append(person)

    # id가 뷰에 없을 수도 있으니 안전 정렬
    def _sort_key(x: dict):
        if "id" in x and x["id"] is not None:
            return (_to_int_safe(x.get("id")), str(x.get("position") or ""), str(x.get("name") or ""))
        return (10**12, str(x.get("position") or ""), str(x.get("name") or ""))

    enriched.sort(key=_sort_key)

    return templates.TemplateResponse("group/executives.html", {
        "request": request, "tabs": tabs, "current": current, "rows": enriched,
    })
