"""Capa de presentación de Hermes: no altera las herramientas ni su resultado."""
import json
import re

TECH_PREFIX = re.compile(r"^\s*(PURGA_FUTBOL|BORRAR_FUTBOL|SLING_FUTBOL|BÚSQUEDA|BUSQUEDA|RESULTADO DE SELECCIÓN)\s*:\s*", re.I)
INTERNAL = re.compile(r"(?:manual:|uefa\.[a-z]+:|mex\.[a-z0-9]+:)[a-zA-Z0-9_.:-]+|\b[0-9a-f]{24,}\b|/var/(?:www|lib)/\S+", re.I)

def _equipos(texto):
    if not texto: return ""
    texto = str(texto)
    texto = INTERNAL.sub("", texto)
    texto = re.sub(r"\s*\([^)]*(?:manual:|id:)[^)]*\)", "", texto, flags=re.I)
    texto = re.sub(r"\b(?:vs\.?|versus)\b", "contra", texto, flags=re.I)
    texto = re.sub(r"\s+", " ", texto).strip(" .,:-()")
    return texto[:110]

def resumir_respuesta(texto, pregunta=""):
    if not isinstance(texto, str): return ""
    original = texto.strip()
    m = TECH_PREFIX.match(original)
    if m:
        tipo = m.group(1).upper()
        payload = original[m.end():].strip()
        try: data = json.loads(payload)
        except (ValueError, TypeError): data = None
        if isinstance(data, dict):
            estado = str(data.get('estado', data.get('status',''))).upper()
            # Nunca anunciar éxito si la herramienta no lo confirmó.
            error = data.get('error') or data.get('ejecutada') is False or any(k in estado for k in ('ERROR','INVALID','FALL','NO_ENCONTR','SIN_','AMBIGU','RECHAZ','PENDIENTE'))
            if error: return 'No pude completar la operación. ¿Quieres que revise el problema?'
            if tipo == 'BORRAR_FUTBOL':
                if data.get('ok') is False or data.get('deleted') is False: return 'No pude confirmar que se eliminó la tarjeta.'
                partido = _equipos(data.get('partido') or data.get('match_name') or data.get('nombre') or '')
                return 'Listo, eliminé la tarjeta' + (' de ' + partido if partido else '') + '.'
            if tipo == 'PURGA_FUTBOL':
                if data.get('ok') is False: return 'No pude completar la limpieza de Fútbol.'
                n = data.get('eliminados', data.get('deleted'))
                return ('Listo, eliminé ' + str(n) + ' tarjetas de Fútbol.' if isinstance(n,int) else 'Listo, terminé la limpieza de Fútbol.')
            if tipo == 'SLING_FUTBOL':
                if estado in ('ELEGIR_FUENTE','VARIAS_OPCIONES'):
                    opciones = data.get('opciones') or []
                    return 'Encontré ' + str(len(opciones)) + ' opciones. ¿Cuál prefieres?'
                if data.get('guardado') is False or data.get('saved') is False: return 'No pude guardar el enlace.'
                if estado in ('ASIGNADO','GUARDADO','OK','ENLACE_ASIGNADO') or data.get('guardado') is True or data.get('saved') is True:
                    return 'Listo, ya asigné el canal al partido.'
                return 'Revisé el canal, pero todavía no confirmé la asignación.'
            if tipo in ('RESULTADO DE SELECCIÓN',):
                if estado in ('ASIGNADO','GUARDADO','OK') or data.get('guardado') is True:
                    return 'Listo, ya asigné la fuente elegida.'
                return 'No pude confirmar la asignación.'
        # Un estado técnico desconocido no se anuncia como éxito.
        return 'No pude confirmar el resultado. ¿Quieres que lo revise?'
    if original.startswith('REFRESH_PANEL_FUTBOL:'):
        return 'Listo, solicité actualizar las tarjetas de Fútbol.'
    # Respuestas naturales: conservar información, quitar IDs internos visibles.
    original = INTERNAL.sub('', original)
    original = re.sub(r"\b(?:vs\.?|versus)\b", 'contra', original, flags=re.I)
    original = re.sub(r'\s{2,}', ' ', original).strip()
    return original
