"""
Mission Control - eine schlanke Steuerzentrale fuer einen lokalen llama-swap Stack.

Dieser Einstieg haelt nur noch das Geruest zusammen: er baut die FastAPI-App,
haengt die Router ein und liefert das statische UI aus. Die eigentliche Logik
liegt nach Concern getrennt in:
  - config.py      Env-Vars / Konstanten
  - auth.py        optionale Token-Auth
  - jobengine.py   Hintergrund-Jobs mit Live-Log
  - llamaswap.py   Reden mit llama-swap + config.yaml lesen/schreiben
  - routers/*      ein Router je Bereich (models, jobs, maintenance, ...)

Bewusst KISS: kein Build-Schritt, kein Framework ueber FastAPI hinaus, keine DB.
Neue Bereiche kommen als routers/<bereich>.py + static/js/panels/<bereich>.js dazu.
"""

from pathlib import Path

from fastapi import FastAPI, HTTPException
from fastapi.responses import FileResponse, JSONResponse
from fastapi.staticfiles import StaticFiles

from routers import jobs, maintenance, models, system, cookbook

app = FastAPI(title="Mission Control")

app.include_router(models.router)
app.include_router(jobs.router)
app.include_router(maintenance.router)
app.include_router(system.router)
app.include_router(cookbook.router)

_STATIC = Path(__file__).parent / "static"


@app.get("/")
def index():
    return FileResponse(_STATIC / "index.html")


app.mount("/static", StaticFiles(directory=_STATIC), name="static")


@app.exception_handler(HTTPException)
def _http_exc(_req, exc: HTTPException):
    return JSONResponse(status_code=exc.status_code, content={"error": exc.detail})
