"""
Point d'entrée FastAPI pour Talk2CV Backend.

Lance avec :
    uvicorn app.main:app --reload --host 0.0.0.0 --port 8000

Documentation interactive :
    http://localhost:8000/docs     (Swagger UI)
    http://localhost:8000/redoc    (ReDoc)
"""

import logging

from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware

from app.core.config import settings
from app.api.routes import health, transcribe, cvs, auth, profiles, admin

logging.basicConfig(level=logging.INFO)


# ============================================
# Instance FastAPI principale
# ============================================
app = FastAPI(
    title="Talk2CV Backend",
    description="API pour transcription vocale et génération de CV",
    version="0.1.0",
    docs_url="/docs",
    redoc_url="/redoc",
)


# ============================================
# Middleware CORS
# ============================================
# Permet à l'app React Native d'appeler ce backend
# En dev : autorise tout. En prod : restreindre aux domaines réels.
app.add_middleware(
    CORSMiddleware,
    allow_origins=settings.ALLOWED_ORIGINS,
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
)


# ============================================
# Routers (endpoints)
# ============================================
app.include_router(health.router)
app.include_router(transcribe.router)
app.include_router(cvs.router)
app.include_router(auth.router)
app.include_router(profiles.router)
app.include_router(admin.router)


# ============================================
# Lifecycle events
# ============================================
@app.on_event("startup")
async def on_startup():
    """Affiché au démarrage du serveur."""
    print("=" * 50)
    print("🚀 Talk2CV Backend démarré")
    print(f"   Environment : {settings.ENVIRONMENT}")
    print(f"   Host        : {settings.API_HOST}:{settings.API_PORT}")
    print(f"   Parser LLM  : {settings.LLM_PARSER}")
    print(f"   Whisper     : {settings.WHISPER_MODEL}")
    print(f"   Docs        : http://localhost:{settings.API_PORT}/docs")
    print("=" * 50)


@app.on_event("shutdown")
async def on_shutdown():
    """Affiché à l'arrêt du serveur."""
    print("👋 Talk2CV Backend arrêté")