import sqlite3
from datetime import datetime, timedelta
from zoneinfo import ZoneInfo

DB = "/var/lib/hermes-nexus/epg.db"
TZ = ZoneInfo("America/Tijuana")

def buscar_epg(termino, dias=2, limite=30):
    termino = termino.strip()

    if not termino:
        return []

    dias = max(1, min(int(dias), 14))
    limite = max(1, min(int(limite), 100))

    ahora = datetime.now(TZ)
    fin = ahora + timedelta(days=dias)

    with sqlite3.connect(DB) as db:
        filas = db.execute("""
            SELECT fuente, canal, titulo, inicio, fin, descripcion
            FROM epg_programas
            WHERE (
                titulo LIKE ? OR descripcion LIKE ?
            )
            ORDER BY inicio
        """, (
            f"%{termino}%",
            f"%{termino}%"
        )).fetchall()

    resultados = []

    for fuente, canal, titulo, inicio, fin_epg, descripcion in filas:
        try:
            fecha = datetime.strptime(
                inicio[:14], "%Y%m%d%H%M%S"
            )

            zona = inicio[15:20].strip()
            if zona:
                signo = 1 if zona[0] == "+" else -1
                horas = int(zona[1:3])
                minutos = int(zona[3:5])
                offset = signo * timedelta(
                    hours=horas, minutes=minutos
                )
                fecha = fecha.replace(
                    tzinfo=__import__("datetime").timezone(offset)
                )
            else:
                continue

            local = fecha.astimezone(TZ)

            if ahora <= local <= fin:
                resultados.append({
                    "fuente": fuente,
                    "canal": canal,
                    "titulo": titulo,
                    "hora_mexicali": local.strftime(
                        "%Y-%m-%d %H:%M"
                    ),
                    "descripcion": descripcion[:250]
                })

        except Exception:
            continue

        if len(resultados) >= limite:
            break

    return resultados
