"""Main application module for Bhasika Chatbot Service"""

from contextlib import asynccontextmanager  # for lifespan

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

from app.api.api import api_router
from app.core.rag.graph import init_rag_app, shutdown_rag_app
from app.embeddings.pgvector_store import init_vectorstore_tables
from app.utils import get_logger, setup_logging

setup_logging()

logger = get_logger(__name__)


@asynccontextmanager
async def lifespan(app: FastAPI):
    logger.info("Starting up Bhasika API")
    await init_rag_app()
    await init_vectorstore_tables()
    try:
        yield
    finally:
        await shutdown_rag_app()
        logger.info("Shutting down Bhasika API")


def create_app() -> FastAPI:
    """Create and configure the FastAPI application."""
    app = FastAPI(title="Bhasika Chatbot API", lifespan=lifespan)

    # Basic CORS for local development; tighten in production.
    app.add_middleware(
        CORSMiddleware,
        allow_origins=["*"],
        allow_credentials=True,
        allow_methods=["*"],
        allow_headers=["*"],
    )

    # include api routers
    app.include_router(api_router, prefix="/api")
    logger.info("Included api_router at /api")

    return app


app = create_app()
