from fastapi import FastAPI, HTTPException
from fastapi.middleware.cors import CORSMiddleware
from pydantic import BaseModel
import json
import os
from dotenv import load_dotenv
from openai import OpenAI

# Importar el nuevo servicio CRM
from crm_ai_service import analizar_cliente, chatear_sobre_cliente

load_dotenv()

app = FastAPI(title="Perfil Usuarios API")

# Configurar CORS para permitir que cualquier frontend se conecte
app.add_middleware(
    CORSMiddleware,
    allow_origins=["*"],  # Permite todas las URLs (útil para pruebas, en prod se especifican dominios)
    allow_credentials=True,
    allow_methods=["*"],  # Permite GET, POST, OPTIONS, PUT, DELETE, etc.
    allow_headers=["*"],  # Permite cualquier cabecera
)

# Cargar la base de datos simulada en memoria
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
DATA_FILE = os.path.join(BASE_DIR, "data.json")

with open(DATA_FILE, "r", encoding="utf-8") as f:
    users_db = json.load(f)

# Configurar cliente OpenAI (se mantiene para /recomendaciones)
client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))

@app.get("/")
def read_root():
    return {"message": "API activa. Pruebe /perfil/{cedula}, /recomendaciones/{cedula} o /api/crm/inteligencia/{cedula}"}

@app.get("/perfil/{cedula}")
def get_perfil(cedula: str):
    for user in users_db:
        if user["cedula"] == cedula:
            return user
    raise HTTPException(status_code=404, detail="Usuario no encontrado")

@app.get("/perfiles")
def get_all_perfiles():
    return users_db

# Modelo Pydantic para el chat
class ChatPregunta(BaseModel):
    pregunta: str

# Endpoint 1: Inteligencia CRM Avanzada (JSON output estructurado)
@app.get("/api/crm/inteligencia/{cedula}")
def get_inteligencia_crm(cedula: str):
    """
    Endpoint para alimentar el Dashboard de un CRM. 
    Devuelve scores comerciales, riesgo y perfilamiento generado por OpenAI.
    """
    user_data = None
    for user in users_db:
        if user["cedula"] == cedula:
            user_data = user
            break
            
    if not user_data:
        raise HTTPException(status_code=404, detail="Usuario no encontrado")
        
    # Llamada a nuestro servicio externo de AI puramente para CRM
    resultado_ia = analizar_cliente(user_data)
    
    if "error" in resultado_ia:
        raise HTTPException(status_code=500, detail=resultado_ia["error"])
        
    return {
        "cedula": cedula,
        "nombre": user_data.get("nombre"),
        "inteligencia_comercial": resultado_ia
    }

# Endpoint 2: Chat Interactivo sobre el cliente
@app.post("/api/crm/chat/{cedula}")
def chat_cliente(cedula: str, payload: ChatPregunta):
    """
    Permite hacer preguntas libres sobre un cliente usando IA.
    Body JSON esperado: {"pregunta": "¿Por qué es riesgoso este cliente?"}
    """
    user_data = None
    for user in users_db:
        if user["cedula"] == cedula:
            user_data = user
            break
            
    if not user_data:
        raise HTTPException(status_code=404, detail="Usuario no encontrado")
        
    resultado_chat = chatear_sobre_cliente(user_data, payload.pregunta)
    
    if "error" in resultado_chat:
        raise HTTPException(status_code=500, detail=resultado_chat["error"])
        
    return {
        "cedula": cedula,
        "nombre": user_data.get("nombre"),
        "pregunta": payload.pregunta,
        "respuesta": resultado_chat["respuesta"]
    }

if __name__ == "__main__":
    import uvicorn
    # Se ejecuta en el puerto 9500
    uvicorn.run(app, host="0.0.0.0", port=9500)
