"""Coordinador de acciones de Fútbol. No maneja ni devuelve secretos.
Usa los adaptadores existentes; no crea URLs de canales ni modifica otras ligas.
"""
import sqlite3
from datetime import datetime, timezone
from urllib.parse import urlsplit
from hermes_football_v3d import DB


def _eventos():
    with sqlite3.connect('file:'+DB+'?mode=ro', uri=True) as db:
        db.row_factory=sqlite3.Row
        return [dict(r) for r in db.execute('SELECT id,home,away,starts_utc,local_day,logo,away_logo FROM events')]


def _resolver(termino):
    from hermes_football_cards_v42 import norm
    t=norm(str(termino or ''))
    if not t: return None, {'estado':'CONSULTA_VACIA'}
    rows=_eventos()
    exact=[r for r in rows if r['id']==termino]
    if exact: return exact[0],None
    found=[r for r in rows if t in norm(r['home']) or t in norm(r['away']) or t in norm(r['home']+' '+r['away'])]
    if not found:return None,{'estado':'SIN_TARJETA','busqueda':termino}
    if len(found)>1:return None,{'estado':'VARIAS_TARJETAS','opciones':[{'id':r['id'],'partido':r['home']+' vs '+r['away'],'fecha':r['local_day']} for r in found[:15]]}
    return found[0],None


def asignar_enlace(equipo_o_id, enlace):
    """Guarda URL completa en la tarjeta, sin exigir coincidencia EPG."""
    event,error=_resolver(equipo_o_id)
    if error:return error
    from hermes_football_cards_v42 import forzar_enlace_futbol
    return forzar_enlace_futbol(event['id'],enlace=enlace)


def buscar_fuentes(equipo, usuario, sesion):
    """Utiliza el catálogo/EPG autorizado de V5 y mantiene opciones por sesión."""
    from hermes_football_v5 import buscar_opciones
    return buscar_opciones(equipo,usuario,sesion)


def elegir_fuente(numero, usuario, sesion):
    from hermes_football_v5 import elegir_opcion
    return elegir_opcion(int(numero),usuario,sesion)


def asignar_logos(equipo_o_id, url_local=None, url_visitante=None, autocompletar=True):
    """Busca escudos en eventos ESPN ya importados y, si es necesario, consulta el adaptador ESPN existente."""
    from hermes_football_cards_v42 import norm,forzar_enlace_futbol
    event,error=_resolver(equipo_o_id)
    if error:return error
    home,away=event['home'],event['away']
    local=url_local or event.get('logo') or ''
    visita=url_visitante or event.get('away_logo') or ''
    sources=[]
    if autocompletar and (not local or not visita):
        rows=_eventos()
        for r in rows:
            if not local and norm(r['home'])==norm(home) and r['logo']:local=r['logo'];sources.append('base_local')
            if not local and norm(r['away'])==norm(home) and r['away_logo']:local=r['away_logo'];sources.append('base_local')
            if not visita and norm(r['home'])==norm(away) and r['logo']:visita=r['logo'];sources.append('base_visitante')
            if not visita and norm(r['away'])==norm(away) and r['away_logo']:visita=r['away_logo'];sources.append('base_visitante')
        if not local or not visita:
            try:
                from hermes_football import fetch
                try:
    from zoneinfo import ZoneInfo
except ImportError:
    from backports.zoneinfo import ZoneInfo
                from datetime import date
                fecha=date.fromisoformat(event['local_day'])
                results,_=fetch(fecha,limit=100)
                for r in results:
                    if not local and norm(r['home'])==norm(home) and r.get('logo'):local=r['logo'];sources.append('espn_local')
                    if not local and norm(r['away'])==norm(home) and r.get('away_logo'):local=r['away_logo'];sources.append('espn_local')
                    if not visita and norm(r['home'])==norm(away) and r.get('logo'):visita=r['logo'];sources.append('espn_visitante')
                    if not visita and norm(r['away'])==norm(away) and r.get('away_logo'):visita=r['away_logo'];sources.append('espn_visitante')
            except Exception as exc:
                sources.append('espn_no_disponible:'+type(exc).__name__)
    # El panel actual admite imágenes ESPN; no colocar logos externos que el panel no renderice.
    def valido(u):
        p=urlsplit(u)
        return p.scheme=='https' and p.hostname in ('a.espncdn.com','a1.espncdn.com','a2.espncdn.com')
    local=local if local and valido(local) else ''
    visita=visita if visita and valido(visita) else ''
    if not local and not visita:return {'estado':'SIN_LOGOS_VERIFICADOS','partido':home+' vs '+away,'fuentes':sources}
    result=forzar_enlace_futbol(event['id'],enlace='',logo_local=local or None,logo_visitante=visita or None)
    result['fuentes']=sources
    result['logo_local_encontrado']=bool(local)
    result['logo_visitante_encontrado']=bool(visita)
    return result


def estado_futbol():
    rows=_eventos()
    return {'estado':'OK','tarjetas':len(rows),'manuales':sum(x['id'].startswith('manual:') for x in rows),
            'ejemplos':[{'id':r['id'],'partido':r['home']+' vs '+r['away'],'fecha':r['local_day']} for r in rows[:10]]}
