"""
Application FastAPI principale - MAESTRO ERP
Module Ressources (Bibliothèque, Archives, Clients)
"""
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from fastapi.staticfiles import StaticFiles
from fastapi.responses import FileResponse
from pathlib import Path
from app.config import settings
from app.database import init_db
from app.routes import articles, clients, categories, projets, niveaux, pieces, types_pieces, evenements, etiquettes, notifications, consommation
from app.routes import recap_xbat
from app.routes import auth
from app.routes import operateurs
from app.routes import planning
from app.routes import analyse
from app.routes import bons_livraison
from app.routes import entreprise
from app.routes import vgp
from app.routes import transport
from app.routes import fournisseurs
from app.routes import annotations



# Créer l'application FastAPI
app = FastAPI(
    title=settings.APP_NAME,
    version=settings.APP_VERSION,
    description="API Backend pour le module Ressources de MAESTRO ERP",
    docs_url="/api/docs",
    redoc_url="/api/redoc"
)

# Configuration CORS
app.add_middleware(
    CORSMiddleware,
    allow_origins=["*"],  # Permet toutes les origines (pour le dev)
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
)

# Inclure les routers
app.include_router(articles.router)
app.include_router(clients.router)
app.include_router(categories.router)
app.include_router(projets.router)
app.include_router(niveaux.router)
app.include_router(pieces.router)
app.include_router(types_pieces.router)
app.include_router(evenements.router)
app.include_router(etiquettes.router)
app.include_router(notifications.router)
app.include_router(consommation.router)
app.include_router(recap_xbat.router)
app.include_router(auth.router)
app.include_router(operateurs.router)
app.include_router(planning.router)
app.include_router(analyse.router)
app.include_router(bons_livraison.router)
app.include_router(entreprise.router)
app.include_router(vgp.router)
app.include_router(transport.router)
app.include_router(fournisseurs.router)
app.include_router(annotations.router)

@app.on_event("startup")
async def startup_event():
    """
    Initialisation au démarrage de l'application
    """
    print(f"🚀 Démarrage de {settings.APP_NAME} v{settings.APP_VERSION}")
    print(f"📊 Initialisation de la base de données...")
    init_db()
    print(f"✅ Base de données initialisée")


@app.get("/")
async def root():
    """
    Route racine - informations sur l'API
    """
    return {
        "app": settings.APP_NAME,
        "version": settings.APP_VERSION,
        "status": "running",
        "docs": "/api/docs",
        "endpoints": {
            "articles": "/api/articles",
            "clients": "/api/clients",
            "categories": "/api/categories"
        }
    }


@app.get("/health")
async def health_check():
    """
    Vérification de la santé de l'API
    """
    return {
        "status": "healthy",
        "app": settings.APP_NAME,
        "version": settings.APP_VERSION
    }


# Route pour servir le frontend (optionnel)
# Décommentez si vous voulez servir le HTML depuis FastAPI
"""
@app.get("/app")
async def serve_frontend():
    frontend_path = Path(__file__).parent.parent / "frontend" / "MAESTRO_MODULE_RESSOURCES.html"
    if frontend_path.exists():
        return FileResponse(frontend_path)
    return {"error": "Frontend non trouvé"}
"""


if __name__ == "__main__":
    import uvicorn
    uvicorn.run(
        "app.main:app",
        host="0.0.0.0",
        port=8000,
        reload=settings.DEBUG
    )
