"""Configuração do Jinja2 e helpers de renderização/flash.""" from __future__ import annotations from pathlib import Path from fastapi.templating import Jinja2Templates from starlette.requests import Request from starlette.responses import HTMLResponse from . import auth from .config import get_settings from .dates import ANOS_COMPETENCIA, MESES, format_competencia from .storage import money TEMPLATES_DIR = Path(__file__).resolve().parent / "templates" templates = Jinja2Templates(directory=str(TEMPLATES_DIR)) templates.env.filters["money"] = money templates.env.filters["competencia"] = format_competencia def flash(request: Request, message: str, level: str = "info") -> None: bucket = request.session.setdefault("_flash", []) bucket.append({"message": message, "level": level}) def pop_flash(request: Request) -> list[dict[str, str]]: return request.session.pop("_flash", []) def render(request: Request, name: str, status_code: int = 200, **context) -> HTMLResponse: settings = get_settings() base = { "request": request, "current_user": auth.current_user(request), "csrf_token": auth.get_csrf_token(request), "flashes": pop_flash(request), "openai_enabled": settings.openai_enabled, "app_name": "Lernotafiscal", "meses_competencia": MESES, "anos_competencia": ANOS_COMPETENCIA, } base.update(context) return templates.TemplateResponse(request, name, base, status_code=status_code)