from hermes_memory import guardar, historial
from hermes_research_v2 import (
    llamar_gemini,
    ejecutar_herramienta_research
)

def preguntar_hermes_v4(pregunta, usuario, sesion):
    if not isinstance(pregunta, str) or not pregunta.strip():
        raise ValueError("Pregunta inválida")

    contenidos = historial(usuario, sesion, limite=12)

    contenidos.append({
        "role": "user",
        "parts": [{"text": pregunta}]
    })

    herramientas_usadas = []

    for vuelta in range(4):
        resultado = llamar_gemini(contenidos)
        contenido = resultado["candidates"][0]["content"]

        llamadas = [
            parte["functionCall"]
            for parte in contenido.get("parts", [])
            if "functionCall" in parte
        ]

        if not llamadas:
            respuesta = "".join(
                parte.get("text", "")
                for parte in contenido.get("parts", [])
            ).strip()

            if not respuesta:
                raise RuntimeError("Gemini no devolvió texto")

            guardar(usuario, sesion, "user", pregunta)
            guardar(usuario, sesion, "model", respuesta)

            return {
                "respuesta": respuesta,
                "herramientas": herramientas_usadas
            }

        contenidos.append(contenido)
        respuestas = []

        for llamada in llamadas[:3]:
            nombre = llamada["name"]
            argumentos = llamada.get("args", {})

            datos = ejecutar_herramienta_research(
                nombre,
                argumentos
            )

            herramientas_usadas.append(nombre)

            respuestas.append({
                "functionResponse": {
                    "name": nombre,
                    "response": {"result": datos}
                }
            })

        contenidos.append({
            "role": "user",
            "parts": respuestas
        })

    raise RuntimeError("Límite de investigación alcanzado")
