"""Guidance documents (PDFs), visible to signed-in users only."""

from __future__ import annotations

from fastapi import APIRouter, Depends, HTTPException
from fastapi.responses import FileResponse

from ..auth import User, current_user
from ..settings import get_settings
from ..sources import DOCS, UNLISTED_PRECEDENCE
from ..style import rules as style_rules

router = APIRouter(prefix="/guidance", tags=["guidance"])


def _docs() -> dict[str, dict]:
    """PDFs in the guidance folder, in precedence order (see app/sources.py)."""
    root = get_settings().guidance_docs_dir
    if not root.is_dir():
        return {}
    docs = []
    for p in root.glob("*.pdf"):
        meta = DOCS.get(p.name, {})
        docs.append({
            "name": p.name,
            "title": meta.get("title", p.stem.replace("-", " ").title()),
            "role": meta.get("role", ""),
            "precedence": meta.get("precedence", UNLISTED_PRECEDENCE),
            "bytes": p.stat().st_size,
        })
    docs.sort(key=lambda d: (d["precedence"], d["name"]))
    return {d["name"]: d for d in docs}


@router.get("/docs")
def list_docs(user: User = Depends(current_user)):
    return list(_docs().values())


@router.get("/writing-style")
def writing_style(user: User = Depends(current_user)):
    """Writing for Busy Readers principles and the size of the wordy-phrase check."""
    r = style_rules()
    return {"source": r["source"], "principles": r["principles"], "wordy_rules": len(r["wordy"]),
            "excluded": r["excluded"]}


@router.get("/docs/{name}")
def get_doc(name: str, user: User = Depends(current_user)):
    docs = _docs()
    if name not in docs:  # only files that are listed — no path traversal
        raise HTTPException(404, "Document not found")
    return FileResponse(get_settings().guidance_docs_dir / name, media_type="application/pdf", filename=name,
                        content_disposition_type="inline")
