from __future__ import annotations

from pathlib import Path

from fastapi import FastAPI
from fastapi.staticfiles import StaticFiles

from app.config import Settings
from app.routes.api import router as api_router
from app.routes.ui import router as ui_router
from app.services.store import JSONStore


BASE_DIR = Path(__file__).resolve().parent


def create_app(state_dir: Path | str | None = None) -> FastAPI:
    settings = Settings()
    app = FastAPI(title=settings.app_name)
    resolved_state_dir = Path(state_dir) if state_dir is not None else settings.default_state_dir
    app.state.store = JSONStore(resolved_state_dir)
    app.mount('/static', StaticFiles(directory=BASE_DIR / 'static'), name='static')
    app.include_router(ui_router)
    app.include_router(api_router)
    return app


app = create_app()
