from __future__ import annotations
from typing import Any, Dict, List, Tuple
from fastapi import APIRouter, Request
from fastapi.responses import HTMLResponse
from app.web.deps import templates, sb, logger
import hashlib

router = APIRouter()

# 출력 순서(요청 순서 그대로)
COMMITTEES_ORDER = [
    "국회운영위원회",
    "법제사법위원회",
    "정무위원회",
    "기획재정위원회",
    "교육위원회",
    "과학기술정보방송통신위원회",
    "외교통일위원회",
    "국방위원회",
    "행정안전위원회",
    "문화체육관광위원회",
    "농림축산식품해양수산위원회",
    "산업통상자원중소벤처기업위원회",
    "보건복지위원회",
    "환경노동위원회",
    "국토교통위원회",
    "정보위원회",
    "여성가족위원회",
    "예산결산특별위원회",
]

# 겸임 상임위원회 표시용
CONCURRENT = {"국회운영위원회", "정보위원회", "여성가족위원회", "예산결산특별위원회"}

def _person_key(full_name: str | None, room_no: str | None) -> str:
    base = f"{(full_name or '').strip()}|{(room_no or '').strip()}"
    return hashlib.sha1(base.encode("utf-8")).hexdigest()

def _label_election(n: Any) -> str:
    try:
        v = int(n)
    except Exception:
        return "-"
    if v == 1:
        return "초선"
    if v == 2:
        return "재선"
    return f"{v}선"

def _district_br(v: str | None) -> str:
    s = (v or "").strip()
    return "<br>".join(s.split()) if s else ""

@router.get("/congress/chairs", response_class=HTMLResponse)
async def congress_chairs(request: Request):
    rows: List[Dict[str, Any]] = []

    for name in COMMITTEES_ORDER:
        try:
            # role_name 이 '위원장'으로 시작하는 사람만 (겸직/수석/제n부의장 변주까지 포괄)
            res = (
                sb.table("congress_member_cur")
                .select(
                    "role_name,full_name,name_hanja,party,district,phone,room_no,"
                    "photo_url,member_page_url,aide_staff,aide_secretary,aide_secretary2,"
                    "election_count"
                )
                .eq("committee_name", name)
                .like("role_name", "위원장%")
                .limit(1)
                .execute()
            )
            item = (res.data or [{}])[0] if res else {}
        except Exception as e:
            logger.warning(f"chairs fetch failed: {name} / {e}")
            item = {}

        rows.append({
            "committee_name": name,
            "is_concurrent": name in CONCURRENT,
            "role_name": item.get("role_name") or "위원장",
            "full_name": item.get("full_name") or "-",
            "name_hanja": item.get("name_hanja") or "",
            "party": item.get("party") or "-",
            "district_br": _district_br(item.get("district")),
            "phone": item.get("phone") or "",
            "room_no": item.get("room_no") or "",
            "photo_url": item.get("photo_url") or "",
            "member_page_url": item.get("member_page_url") or "",
            "person_key": _person_key(item.get("full_name"), item.get("room_no")) if (item.get("full_name") or item.get("room_no")) else "",
            "aide_staff": item.get("aide_staff") or "",
            "aide_secretary": item.get("aide_secretary") or "",
            "aide_secretary2": item.get("aide_secretary2") or "",
            "election_label": _label_election(item.get("election_count")),
        })

    return templates.TemplateResponse(
        "congress/chairs.html",
        {
            "request": request,
            "rows": rows,
            "note_concurrent": "※ * 표시는 겸임 상임위원회를 의미합니다.",
        },
    )
