import os
from pathlib import Path
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from fastapi.staticfiles import StaticFiles
from fastapi.responses import FileResponse

from .database import engine, Base
from .config import settings
from .routers import auth, exams, sessions, admin

# Create all tables on startup
Base.metadata.create_all(bind=engine)

app = FastAPI(
    title="Simulări Examene Naționale România",
    description="API pentru simularea examenelor Evaluarea Națională și Bacalaureat",
    version="1.0.0",
)

app.add_middleware(
    CORSMiddleware,
    allow_origins=["*"],
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
)

# API routes
app.include_router(auth.router,     prefix="/api/auth",     tags=["Autentificare"])
app.include_router(exams.router,    prefix="/api/exams",    tags=["Examene"])
app.include_router(sessions.router, prefix="/api/sessions", tags=["Sesiuni"])
app.include_router(admin.router,    prefix="/api/admin",    tags=["Administrare"])

# Serve the frontend (must be last)
WEB_DIR = Path(__file__).parent.parent.parent / "web"
if WEB_DIR.exists():
    app.mount("/static", StaticFiles(directory=str(WEB_DIR)), name="static")

    @app.get("/{full_path:path}", include_in_schema=False)
    async def serve_frontend(full_path: str):
        # Try the exact file first
        target = WEB_DIR / full_path
        if target.is_file():
            return FileResponse(str(target))
        # Fallback: if it's an admin sub-path
        if full_path.startswith("admin"):
            admin_index = WEB_DIR / "admin" / "index.html"
            if admin_index.exists():
                return FileResponse(str(admin_index))
        return FileResponse(str(WEB_DIR / "index.html"))
