from fastapi import Depends, FastAPI
from fastapi.middleware.cors import CORSMiddleware
from contextlib import asynccontextmanager

from .depedencies import has_access
from .routers import users, auth, clients, interventions, anomalies, pools, notifications
from .scheduler import start_scheduler, stop_scheduler

@asynccontextmanager
async def lifespan(app: FastAPI):
    # Startup event
    start_scheduler()
    yield
    # Shutdown event
    await stop_scheduler()

app = FastAPI(
    title="Vast'Appli API",
    description="API for all Vast'Appli services",
    version="0.0.1",
    docs_url="/",
    redoc_url="/doc",
    lifespan=lifespan  # Using lifespan context manager
)

app.add_middleware(
    CORSMiddleware,
    allow_origins=["*"],
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
)

app.include_router(auth.router)
app.include_router(users.router, dependencies=[Depends(has_access)])
app.include_router(clients.router, dependencies=[Depends(has_access)])
app.include_router(pools.router, dependencies=[Depends(has_access)])
app.include_router(interventions.router, dependencies=[Depends(has_access)])
app.include_router(anomalies.router, dependencies=[Depends(has_access)])
app.include_router(notifications.router, dependencies=[Depends(has_access)])