from __future__ import annotations from fastapi import APIRouter, Depends, Request from fastapi.responses import HTMLResponse from fastapi.templating import Jinja2Templates from dependencies import require_any_role, require_roles from models import User router = APIRouter(tags=["UI"]) templates = Jinja2Templates(directory="templates") READ_ROLES = ("viewer", "analyst", "project_manager", "admin") MANAGE_ROLES = ("project_manager", "admin") @router.get( "/ui/simulations", response_class=HTMLResponse, include_in_schema=False, name="ui.simulations", ) def simulations_dashboard( request: Request, _: User = Depends(require_any_role(*READ_ROLES)), ) -> HTMLResponse: return templates.TemplateResponse( request, "simulations.html", { "title": "Simulations", }, ) @router.get( "/ui/reporting", response_class=HTMLResponse, include_in_schema=False, name="ui.reporting", ) def reporting_dashboard( request: Request, _: User = Depends(require_any_role(*READ_ROLES)), ) -> HTMLResponse: return templates.TemplateResponse( request, "reporting.html", { "title": "Reporting", }, ) @router.get( "/ui/settings", response_class=HTMLResponse, include_in_schema=False, name="ui.settings", ) def settings_page( request: Request, _: User = Depends(require_any_role(*READ_ROLES)), ) -> HTMLResponse: return templates.TemplateResponse( request, "settings.html", { "title": "Settings", }, ) @router.get( "/theme-settings", response_class=HTMLResponse, include_in_schema=False, name="ui.theme_settings", ) def theme_settings_page( request: Request, _: User = Depends(require_any_role(*READ_ROLES)), ) -> HTMLResponse: return templates.TemplateResponse( request, "theme_settings.html", { "title": "Theme Settings", }, ) @router.get( "/ui/currencies", response_class=HTMLResponse, include_in_schema=False, name="ui.currencies", ) def currencies_page( request: Request, _: User = Depends(require_roles(*MANAGE_ROLES)), ) -> HTMLResponse: return templates.TemplateResponse( request, "currencies.html", { "title": "Currency Management", }, )