from langchain.agents import (
    AgentExecutor,
    create_tool_calling_agent,
)
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain_core.tools import tool
from app.langchain_lhia.funciones_langchain.hilo_conversacion import verificaciones


def hilo_conversacion(identificador: str, pregunta: str):
    @tool
    def es_conjuncion(pregunta) -> str:
        """usa esta herramienta para verificar si la pregunta ingresada contiene un conector de frases o contiene una conjuncion al inicio de la frase"""
        return verificaciones.es_conjuncion(pregunta)

    @tool
    def union_pregunta(identificador, pregunta) -> str:
        "usa esta herramienta para unir 2 frases"
        return verificaciones.union_pregunta(identificador,pregunta)

    tools = [es_conjuncion, union_pregunta]
    
    print(tools)

    prompt = ChatPromptTemplate.from_messages(
        [
            (
                "system",
               f"""si la respuesta de la primera herramienta {tools[0].name} es si usa la segunda herramienta {tools[1].name}, entrega solamente como respuesta la frase nueva generada""",
            ),
            ("user", "{pregunta}"),("user", "{identificador}"),
            MessagesPlaceholder(variable_name="agent_scratchpad"),
        ]
    )

    agent = create_tool_calling_agent(verificaciones.llm_chatopenai(), tools, prompt)
    print(agent)
    agent_executor = AgentExecutor(
        agent=agent,
        tools=tools,
        verbose=True,
        max_iterations=5,
    )
    respuesta =agent_executor.invoke({"pregunta": pregunta, "identificador": identificador})
    return respuesta
