# main.py
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
import logging
import os
import json
from datetime import datetime
import aiofiles

from clases import ChatN8nBasicoRequest
from asistente import chat_n8n
# Si definiste init_db() en tu archivo de conexión con aiomysql:

app = FastAPI(
    title="Catia API",
    version="1.0.0",
    docs_url=None,       
    redoc_url=None,      
    openapi_url=None    
)

# ── CORS ──────────────────────────────────────────────────────────────────────
app.add_middleware(
    CORSMiddleware,
    allow_origins=["http://localhost:4200", "http://10.51.20.5:5000","http://52.160.93.231:5000",
                   "http://52.160.93.231:5001" ,"https://dev.crm.ayudacatastro.co", "https://10.51.20.5:5000", 
                   "https://pre.crm.catastroantioquia-mas.com", "https://pre.ayuda.catastroantioquia-mas.com", "https://pre.miperfil.catastroantioquia-mas.com", 
                   "https://core.ayudacatastro.co:5001","https://dev.miperfil.ayudacatastro.co","https://dev.ayudacatastro.co",
                   "https://pro.ayudacatastro.co", "https://pro.crm.ayudacatastro.co", "https://pro.miperfil.ayudacatastro.co",
                   "https://dev.ayuda.catastroantioquia-mas.com","https://dev.miperfil.catastroantioquia-mas.com",
                   "https://dev.crm.catastroantioquia-mas.com", "https://pru.ayuda.catastroantioquia-mas.com",
                   "https://pru.miperfil.catastroantioquia-mas.com","https://pru.crm.catastroantioquia-mas.com",
                   "https://ayuda.catastroantioquia-mas.com","https://miperfil.catastroantioquia-mas.com",
                   "https://crm.catastroantioquia-mas.com", "https://dev2.miperfil.catastroantioquia-mas.com",
                    "https://dev2.crm.catastroantioquia-mas.com",
                    "https://dev2.ayuda.catastroantioquia-mas.com"],
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
)


# ── Logging ───────────────────────────────────────────────────────────────────
# logging.basicConfig(
#     level=logging.INFO,
#     format="%(asctime)s %(levelname)s [%(name)s] %(message)s",
# )
# logger = logging.getLogger("catia-api")

# ── Startup (init pool DB si aplica) ──────────────────────────────────────────
# @app.on_event("startup")
# async def on_startup():
#     try:
#         await init_db()  # comentá si no usás DB todavía
#         logger.info("Pool de BD inicializado correctamente.")
#     except Exception as e:
#         logger.warning(f"No se inicializó BD en startup (continuando): {e}")

# ── Endpoint ──────────────────────────────────────────────────────────────────
@app.post("/ask/chatCatia")
async def chat_n8n_basico_endpoint(request: ChatN8nBasicoRequest):
    """
    Endpoint básico para chat usando n8n
    """
    try:
        # logger.info("→ /ask/chatN8nBasico recibido")

        # Dict ya validado por Pydantic
        data = request.model_dump()

        # logger.info("Llamando a enviar_chat_n8n_basico()…")
        resultado = await chat_n8n.enviar_chat_n8n_basico(data)
        # logger.info("Respuesta recibida de enviar_chat_n8n_basico().")

        # Log asíncrono a archivo
        base_dir = os.path.dirname(os.path.abspath(__file__))
        log_dir = os.path.join(base_dir, "logs")
        os.makedirs(log_dir, exist_ok=True)
        log_file = os.path.join(log_dir, "chat_n8n_respuestas.txt")

        log_entry = f"[{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}] {json.dumps(resultado, ensure_ascii=False)}\n"
        async with aiofiles.open(log_file, "a", encoding="utf-8") as f:
            await f.write(log_entry)

        return resultado

    except Exception as e:
        # logger.exception("Error en chat_n8n_basico_endpoint")
        return {
            "success": False,
            "message": f"Error al procesar la solicitud: {str(e)}",
            "error_code": "ENDPOINT_ERROR",
        }