"""模板文件生成与下载接口。"""
from __future__ import annotations

from pathlib import Path

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

from app.core.config import settings
from app.core.countries import resolve_country
from app.core.deps import get_source_db
from app.core.paths import safe_join
from app.core.response import AppError, ok
from app.schemas.common import RenderRequest
from app.services.render import render as render_document

router = APIRouter(prefix="/template", tags=["模板生成"])


@router.post("/render", summary="按企业/订单取信息、渲染模板（可选转 PDF）")
def render(req: RenderRequest, session: Session = Depends(get_source_db)):
    return ok(render_document(req, session))


@router.get("/download/{filename}", summary="下载生成的文件")
def download(filename: str):
    output_path = safe_join(Path(settings.output_dir), filename)
    if not output_path.exists():
        raise AppError("文件不存在", code=404, status_code=404)
    return FileResponse(str(output_path), filename=filename)


@router.get("/list", summary="列出可用模板")
def list_templates():
    template_dir = Path(settings.template_dir)
    if not template_dir.exists():
        return ok([])
    items = []
    for p in template_dir.rglob("*"):
        if not p.is_file() or p.name == ".gitkeep":
            continue
        rel = p.relative_to(template_dir).as_posix()
        code, name = resolve_country(rel)
        items.append({"name": rel, "size": p.stat().st_size, "country_code": code, "country_name": name})

    items.sort(key=lambda x: x["name"])
    return ok(items)
