from fastapi import FastAPI, HTTPException
from fastapi.middleware.cors import CORSMiddleware
from contextlib import asynccontextmanager
from db import database
from gemini_routerV2 import router as gemini_routerV2
from fastapi.openapi.utils import get_openapi
from config import logger
import requests
import db_module
from schemas import TokenData
from datetime import datetime


@asynccontextmanager
async def lifespan(app: FastAPI):
    await database.connect()
    print("start")
    yield
    await database.disconnect()
    print("end")

# @app.on_event("startup")
# async def startup():
#     await database.connect()


# @app.on_event("shutdown")
# async def shutdown():
#     await database.disconnect()

app = FastAPI(lifespan=lifespan)

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

@app.get("/", include_in_schema=False)
async def index():
    return True

app.include_router(gemini_routerV2)

def custom_openapi():
    if app.openapi_schema:
        return app.openapi_schema
    openapi_schema = get_openapi(
        title="AIR API with chatgpt",
        version="1.0.0",
        description="""
        Speech To Text Websocket Endpoint : /ws?token=
        Send to voice stream data
        Receive a text
        """,
        routes=app.routes,
    )
    app.openapi_schema = openapi_schema
    return app.openapi_schema

app.openapi = custom_openapi


if __name__ == "__main__":
    # Use this for debugging purposes only
    import uvicorn
    uvicorn.run(app, host="0.0.0.0", port=5020, log_level="debug")
