import sys, os
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))

from fastapi import FastAPI, HTTPException
from fastapi.middleware.cors import CORSMiddleware
from pydantic import BaseModel
from data_ingestion.utils import search, load_embedded_data
from data_ingestion.data_ingest import load_data

app = FastAPI()

# Initialize global variables for FAISS index and vector store
try:
    vector_store = load_embedded_data()
except Exception as e:
    vector_store = None

# Define allowed origins for CORS
origins = [
    "http://localhost",
    "http://localhost:8000",
    "http://localhost:3000",
    # Add other allowed origins here
]

# Add CORS middleware
app.add_middleware(
    CORSMiddleware,
    allow_origins=origins,  # Allows requests from listed origins
    allow_credentials=True,
    allow_methods=["*"],  # Allows all HTTP methods
    allow_headers=["*"],  # Allows all headers
)

class SearchRequest(BaseModel):
    query: str

@app.get("/load_documents")
def load_documents(directory: str):
    global vector_store
    
    # Load documents using the utility function
    vector_store = load_data(directory)
    
    return {"status": "Documents loaded successfully"}

@app.get("/search")
def search(request: SearchRequest):
    global vector_store
    
    # Perform search using the utility function
    results = search(vector_store, request.query)
    
    return {"results": results}

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