"""Config list and editor views.""" from pathlib import Path from datetime import datetime from fastapi import APIRouter, Request from fastapi.responses import HTMLResponse from fastapi.templating import Jinja2Templates from app.core.refdata import ReconPatterns, ReconConfigStatus from app.service.fake_configs import get_fake_configs router = APIRouter(prefix="", tags=["Config_UI"]) _project_root = Path(__file__).resolve().parents[2] templates = Jinja2Templates(directory=str(_project_root / "data" / "templates")) _EDITOR_CONTEXT = { "patterns": [p.value for p in ReconPatterns], "statuses": [s.value for s in ReconConfigStatus], "frequencies": ["Ad Hoc", "Intra Day", "Daily", "Weekly", "Monthly", "Quarterly"], "schema_types": ["str", "int", "float", "date", "datetime", "decimal", "bool"], } @router.get("/configs", response_class=HTMLResponse) async def configs_list_view(request: Request): now = datetime.now() configs = get_fake_configs(now) return templates.TemplateResponse( request=request, name="configs_list.html", context={ "title": "Recon Configs", "configs": configs, }, ) @router.get("/configs/new", response_class=HTMLResponse) async def config_new_view(request: Request): return templates.TemplateResponse( request=request, name="config_editor.html", context={ "title": "New Config", "config": None, "is_new": True, **_EDITOR_CONTEXT, }, ) @router.get("/configs/{reference}/edit", response_class=HTMLResponse) async def config_edit_view(request: Request, reference: str): now = datetime.now() configs = get_fake_configs(now) config = next((c for c in configs if c.reference == reference), None) return templates.TemplateResponse( request=request, name="config_editor.html", context={ "title": f"Edit — {reference}" if config else "Edit Config", "config": config, "reference": reference, "is_new": False, **_EDITOR_CONTEXT, }, )