from fastapi import FastAPI, Form
from openai import BaseModel
from app.filtro_vectores import procesar_colecciones, procesar_colecciones_codigo
from app.actualizacion_productos import actualizar_mulvus
import ast
app = FastAPI()


class RespuestaMilvus(BaseModel):
    contenido: str
    documento: str


class ListaCodigos(BaseModel):
    contenido: list


@app.post("/pregunta_milvus_dego_catalogos")
def envio_pregunta_milvus(pregunta: str = Form(...)):
    colecciones = [
        "Catalogos",
	"Catalogos_inventario1",
	"Catalogos_inventario2",
	"Catalogos_inventario3",
	"Catalogos_inventario4",
	"Catalogos_inventario5"
    ]
    contenido = ""
    titulos = []
    data = procesar_colecciones(
        colecciones,
        db_name="dego",
        uri="http://74.249.12.122:19530",
        pregunta=pregunta,
        k=10,
    )
    docs = []
    for sublist in data:
        docs.extend(sublist)
    docs_ordenados = sorted(docs, key=lambda x: x[1], reverse=True)
    print(docs_ordenados)
    for documento, puntaje in docs_ordenados:
        if puntaje > 0.1:
            contenido += documento.page_content + "\n\n"
            titulos.append(documento.metadata["document"])
    if len(titulos) > 0:
        modelo = RespuestaMilvus(contenido=contenido, documento=titulos[0])
    else:
        modelo = RespuestaMilvus(contenido="", documento="ADICIONAL")
    print(modelo)
    return modelo

@app.post("/pregunta_milvus_ulpik")
def envio_pregunta_milvus(pregunta: str = Form(...)):
    colecciones = [
        "paginas"
    ]
    contenido = ""
    titulos = []
    data = procesar_colecciones(
        colecciones,
        db_name="ulpik",
        uri="http://74.208.60.79:19530",
        pregunta=pregunta,
        k=3,
    )
    docs = []
    for sublist in data:
        docs.extend(sublist)
    docs_ordenados = sorted(docs, key=lambda x: x[1], reverse=True)
    print(docs_ordenados)
    for documento, puntaje in docs_ordenados:
        if puntaje > 0.4:
            contenido += documento.page_content + "\n\n"
            titulos.append(documento.metadata["document"])
    if len(titulos) > 0:
        modelo = RespuestaMilvus(contenido=contenido, documento=titulos[0])
    else:
        modelo = RespuestaMilvus(contenido="", documento="ADICIONAL")
    print(modelo)
    return modelo

@app.post("/pregunta_milvus_dego_compras")
def envio_pregunta_milvus(pregunta: str = Form(...)):
    colecciones = [
        "Compras",
    ]
    contenido = ""
    titulos = []
    data = procesar_colecciones(
        colecciones,
        db_name="degoCompras",
        uri="http://74.249.12.122:19530",
        pregunta=pregunta,
        k=10,
    )
    docs = []
    for sublist in data:
        docs.extend(sublist)
    docs_ordenados = sorted(docs, key=lambda x: x[1], reverse=True)
    print(docs_ordenados)
    for documento, puntaje in docs_ordenados:
        if puntaje > 0.1:
            contenido += documento.page_content + "\n\n"
            titulos.append(documento.metadata["document"])
    if len(titulos) > 0:
        modelo = RespuestaMilvus(contenido=contenido, documento=titulos[0])
    else:
        modelo = RespuestaMilvus(contenido="", documento="ADICIONAL")
    print(modelo)
    return modelo

@app.post("/pregunta_milvus_dego_cartera")
def envio_pregunta_milvus(pregunta: str = Form(...)):
    colecciones = [
        "Cartera",
    ]
    contenido = ""
    titulos = []
    data = procesar_colecciones(
        colecciones,
        db_name="degoCartera",
        uri="http://74.249.12.122:19530",
        pregunta=pregunta,
        k=10,
    )
    docs = []
    for sublist in data:
        docs.extend(sublist)
    docs_ordenados = sorted(docs, key=lambda x: x[1], reverse=True)
    print(docs_ordenados)
    for documento, puntaje in docs_ordenados:
        if puntaje > 0.1:
            contenido += documento.page_content + "\n\n"
            titulos.append(documento.metadata["document"])
    if len(titulos) > 0:
        modelo = RespuestaMilvus(contenido=contenido, documento=titulos[0])
    else:
        modelo = RespuestaMilvus(contenido="", documento="ADICIONAL")
    print(modelo)
    return modelo


@app.post("/pregunta_milvus_dego_inventario")
def envio_pregunta_milvus(pregunta: str = Form(...)):
    colecciones = [
        "Catalogos",
    ]
    codigos = []
    data = procesar_colecciones_codigo(
        colecciones,
        db_name="degoInventario",
        uri="http://74.249.12.122:19530",
        pregunta=pregunta,
        k=10,
    )
    docs = []
    for sublist in data:
        docs.extend(sublist)
    docs_ordenados = sorted(docs, key=lambda x: x[1], reverse=True)
    for documento, puntaje in docs_ordenados:
        if puntaje > 0.1:
            codigos.append(documento.metadata["codigo_venta"])
    if len(codigos) > 0:
        modelo = ListaCodigos(contenido=codigos)
        print(modelo)
    else:
        modelo = ListaCodigos(contenido=[])
    return modelo


@app.post("/actualizar_productos_milvus")
def actualizar_productos_milvus(collectionName: str = Form(...)):
    print("actualizar_productos_milvus")
    return actualizar_mulvus.actualizar_productos(collectionName)
