from contextlib import asynccontextmanager

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

from .routers import attributes, transformation, expert_transformation, deduplication, patent_search
from .services.llm_service import ollama_provider
from .services.embedding_service import embedding_service
from .services.llm_deduplication_service import llm_deduplication_service
from .services.patent_search_service import patent_search_service


@asynccontextmanager
async def lifespan(app: FastAPI):
    yield
    await ollama_provider.close()
    await embedding_service.close()
    await llm_deduplication_service.close()
    await patent_search_service.close()


app = FastAPI(
    title="Attribute Agent API",
    description="API for analyzing objects and extracting their attributes",
    version="1.0.0",
    lifespan=lifespan,
)

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

app.include_router(attributes.router)
app.include_router(transformation.router)
app.include_router(expert_transformation.router)
app.include_router(deduplication.router)
app.include_router(patent_search.router)


@app.get("/")
async def root():
    return {"message": "Attribute Agent API is running"}


@app.get("/health")
async def health_check():
    return {"status": "healthy"}
