import json
import urllib.request
import urllib.error

from hermes_brain import ENV_FILE, MODEL, SYSTEM_PROMPT

def obtener_clave():
    with open(ENV_FILE, encoding="utf-8") as f:
        for linea in f:
            if linea.startswith("GEMINI_API_KEY="):
                return linea.strip().split("=", 1)[1]
    raise RuntimeError("Clave Gemini no configurada")


def buscar_internet(pregunta):
    url = (
        "https://generativelanguage.googleapis.com/v1beta/"
        f"models/{MODEL}:generateContent"
    )

    payload = {
        "systemInstruction": {
            "parts": [{
                "text": SYSTEM_PROMPT + """
Cuando consultes Internet:
- Prioriza información deportiva actualizada.
- Comprueba fechas y zonas horarias.
- Distingue partidos reales de programas deportivos.
- No inventes canales ni horarios.
- Si las fuentes discrepan, indícalo.
- No afirmes que puedes reproducir un evento
  sin consultar las herramientas del panel.
"""
            }]
        },
        "contents": [{
            "role": "user",
            "parts": [{"text": pregunta}]
        }],
        "tools": [{
            "google_search": {}
        }],
        "generationConfig": {
            "maxOutputTokens": 1000
        }
    }

    solicitud = urllib.request.Request(
        url,
        data=json.dumps(payload).encode("utf-8"),
        headers={
            "Content-Type": "application/json",
            "x-goog-api-key": obtener_clave()
        },
        method="POST"
    )

    with urllib.request.urlopen(solicitud, timeout=60) as r:
        resultado = json.load(r)

    candidato = resultado["candidates"][0]

    respuesta = "".join(
        parte.get("text", "")
        for parte in candidato["content"].get("parts", [])
    )

    metadata = candidato.get("groundingMetadata", {})

    fuentes = []
    for chunk in metadata.get("groundingChunks", []):
        web = chunk.get("web", {})
        if web.get("uri"):
            fuentes.append({
                "titulo": web.get("title", ""),
                "url": web["uri"]
            })

    return {
        "respuesta": respuesta,
        "fuentes": fuentes[:10],
        "busqueda_realizada": bool(
            metadata.get("webSearchQueries")
        )
    }
