from fastapi import FastAPI, Request, HTTPException, UploadFile, File, WebSocket, WebSocketDisconnect,Form,Body
from fastapi.middleware.cors import CORSMiddleware
from fastapi.responses import JSONResponse, HTMLResponse,Response
import logging
import shutil
import os
import asyncio
from pydantic import BaseModel, validator
from pydantic import BaseModel, validator, constr  
from typing import Dict, Any, List, Union
import requests
import json
from fastapi.responses import FileResponse
from datetime import datetime
from io import BytesIO
from dotenv import load_dotenv
from jose import jwt, JWTError
from datetime import datetime, timedelta


from chat_tasa import chat_tasa_ia  # Importar funciones de chat IA


# Configuración de Redis

# Importar clases para endpoints POST y PUT
from clases_tasa import ( ChatN8nError, ChatN8nRequest, ChatN8nResponse)


app = FastAPI(
    title="Catia API",
    version="1.0.0",
    debug=True,          
    docs_url=None,      
    redoc_url=None,     
    openapi_url=None     
)


# Configurar CORS para permitir solicitudes desde los orígenes necesarios
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=["*"],
)

# Configurar logging para capturar y mostrar errores
logging.basicConfig(level=logging.INFO)



@app.post("/ask/chat_tasa_ia", response_model=ChatN8nResponse, responses={200: {"model": ChatN8nResponse}, 500: {"model": ChatN8nError}}, tags=["Chat IA"])
async def enviar_mensaje_chat_n8n(datos: ChatN8nRequest = Body(...)):
    resultado = await chat_tasa_ia.enviar_chat_n8n(datos.dict())
    return resultado


if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host="0.0.0.0", port=5000)
