"""Tier C APIs."""

from __future__ import annotations

from fastapi import APIRouter, Depends, HTTPException
from fastapi.responses import FileResponse, PlainTextResponse
from sqlalchemy.orm import Session

from app.api.deps import get_current_user, require_admin
from app.core.database import get_db
from app.models import User
from app.services import wow_tier_c as wc

router = APIRouter(tags=["tier-c"])


@router.get("/public/weekly-index")
def public_weekly_latest():
    data = wc.get_weekly_index()
    if not data:
        return {"items": [], "latest": None, "hint": "Aún no hay snapshot. Admin → publicar índice."}
    return {"latest": data, "history": wc.list_weekly_indexes()[:12]}


@router.get("/public/weekly-index/{week}")
def public_weekly_week(week: str):
    data = wc.get_weekly_index(week)
    if not data:
        raise HTTPException(404, "Semana no encontrada")
    return data


@router.get("/public/weekly-index/{week}/pdf")
def public_weekly_pdf(week: str):
    path = wc.weekly_index_pdf_path(week)
    if not path or not path.exists():
        raise HTTPException(404, "PDF no encontrado")
    return FileResponse(path, filename=path.name, media_type="application/pdf")


@router.get("/public/extension-hints")
def public_extension_hints():
    return wc.extension_dom_hints()


@router.post("/admin/weekly-index/publish")
def admin_publish_index(admin: User = Depends(require_admin), db: Session = Depends(get_db)):
    return wc.publish_weekly_index(db, admin)


@router.get("/intelligence/spain-graph")
def spain_graph(user: User = Depends(get_current_user), db: Session = Depends(get_db)):
    return wc.spain_friendly_graph(db)


@router.get("/intelligence/portal-benchmark/enriched")
def portal_enriched(user: User = Depends(get_current_user), db: Session = Depends(get_db)):
    return wc.enriched_portal_benchmark(db, user)


@router.get("/intelligence/push-digest")
def push_digest(user: User = Depends(get_current_user), db: Session = Depends(get_db)):
    return wc.daily_push_digest(db, user)


@router.get("/intelligence/weekly-index")
def weekly_auth(user: User = Depends(get_current_user)):
    data = wc.get_weekly_index()
    return {"latest": data, "history": wc.list_weekly_indexes()}


@router.get("/intelligence/weekly-index/linkedin.txt")
def weekly_linkedin(user: User = Depends(get_current_user)):
    data = wc.get_weekly_index()
    if not data:
        raise HTTPException(404, "Sin índice publicado")
    return PlainTextResponse(data.get("linkedin_post") or "", media_type="text/plain; charset=utf-8")
