"""Entrypoint FastAPI: CORS, routers y healthcheck."""
import os
from contextlib import asynccontextmanager

from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from fastapi.staticfiles import StaticFiles

from app.api.routes import auth, bookings, catalog, musicians, search
from app.core.config import settings
from app.core.database import init_db


@asynccontextmanager
async def lifespan(app: FastAPI):
    # Asegura PostGIS + tablas al arrancar (idempotente).
    init_db()
    yield


app = FastAPI(title="Gotagig API", version="0.1.0", lifespan=lifespan)

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

app.include_router(auth.router)
app.include_router(catalog.router)
app.include_router(musicians.router)
app.include_router(search.router)
app.include_router(bookings.router)

# Fotos subidas (dev): servidas desde el disco local en /media.
os.makedirs(settings.MEDIA_DIR, exist_ok=True)
app.mount("/media", StaticFiles(directory=settings.MEDIA_DIR), name="media")


@app.get("/health", tags=["meta"])
def health():
    return {"status": "ok"}
