import psycopg2
from langchain import PromptTemplate
from langchain_openai import ChatOpenAI

def llm_chatopenai():
    return ChatOpenAI(
        openai_api_key="",
        temperature=0,
        model="gpt-3.5-turbo-0125",
    )

def es_conjuncion(pregunta: str):
    llm = llm_chatopenai()

    templates = """
  pregunta nueva del usuario: {userPrompt}
  - verifica si la pregunta nueva del usuario contiene conectores o conjunciones al inicio de la frase si es asi devuelve la palabra 'si'
  -  verifica tambien si la pregunta nueva del usuario no tiene una idea completa es decir sujeto, verbo y predicado si es asi devuelve la palabra 'si'
  -  si las 2 verificaicones no se cumplen devuelve la palabra 'no'

  Respuesta final:"""
    prompt_template = PromptTemplate(template=templates, input_variables=["userPrompt"])

    # Crear una instancia de LLMChain
    inquiry_chain = prompt_template | llm

    # Llamar al método de la cadena de consultas
    inquirer_chain_result = inquiry_chain.invoke({"userPrompt": pregunta})

    # Obtener el texto de la respuesta

    return inquirer_chain_result.content


def union_pregunta(identificador: str, frase_1: str):
    llm = llm_chatopenai()
    interaccion = ""
    conn = psycopg2.connect(
        dbname="tws2_db_prod_lhia_jardin",
        user="tws2admin",
        password="Q@QMKUrTsFFa",
        host="198.251.78.201",
        port="5432",
    )
    cur = conn.cursor()
    # Obtener todos los elementos
    count = 0
    cur.execute(
        f"""select ta.texto_pregunta as pregunta, texto_respuesta as respuesta from "lhia-ja".t_actividad ta, "lhia-ja".t_conversacion tc where ta.id_conversacion = tc.id_conversacion and tc.identificador = '{identificador}' order by ta.id_actividad asc limit 4"""
    )
    rows = cur.fetchall()
    count = 0
    for row in rows:
        count = count + 1
        interaccion += (
            "pregunta "
            + str(count)
            + ": ("
            + row[0]
            + "), respuesta: ("
            + row[1]
            + ")\n\n"
        )
    cur.close()
    conn.close()

    print(interaccion)
    templates = """
    registro de la conversación: {conversationHistory}
    nueva preguna del usuario: {userPrompt} 
    crea una nueva pregunta usando la pregunta 4 del registro de conversacion para unirla a la nueva pregunta del usuario, ten encuenta ademas el registro de conversacion para que la nueva pregunta generada tenga sentido devuleve como respuesta unicamente la frase generada
  Respuesta final:"""
    prompt_template = PromptTemplate(
        template=templates, input_variables=["userPrompt", "conversationHistory"]
    )

    # Crear una instancia de LLMChain
    inquiry_chain = prompt_template | llm

    # Llamar al método de la cadena de consultas
    inquirer_chain_result = inquiry_chain.invoke(
        {"userPrompt": frase_1, "conversationHistory": interaccion}
    )

    # Obtener el texto de la respuesta

    return inquirer_chain_result.content
