"""
Diagnostico: revisa la tabla 'campanias' y detecta cruces = misma frase_busqueda
(mismo emoji/texto) con rangos de fecha [fecha_inicio, fecha_fin] que se SOLAPAN.
Un mensaje que caiga en el solape haria match con 2 campanias a la vez.
"""
import data_manager_v2 as dm
import leads_logic as L

# _campanias_supabase() trae tuplas (frase, cargo, codigo, sede, dia, origen, fi, ff)
crudas = dm._campanias_supabase()
campanias = [{"frase_busqueda": t[0], "cargo": t[1], "codigo": t[2], "sede": t[3],
              "dia": t[4], "origen": t[5], "fecha_inicio": t[6], "fecha_fin": t[7]}
             for t in crudas]
print(f"Total campanias: {len(campanias)}\n")

# agrupar por frase_busqueda
por_frase = {}
for c in campanias:
    frase = " ".join(str(c.get("frase_busqueda") or "").split())
    por_frase.setdefault(frase, []).append(c)

def _rango(c):
    fi = L._to_date(str(c.get("fecha_inicio") or "")[:10])
    ff = L._to_date(str(c.get("fecha_fin") or "")[:10])
    return fi, ff

cruces = 0
print("=== CRUCES (misma frase + fechas solapadas) ===\n")
for frase, lista in por_frase.items():
    if len(lista) < 2:
        continue
    # comparar cada par
    for i in range(len(lista)):
        for j in range(i + 1, len(lista)):
            a, b = lista[i], lista[j]
            fia, ffa = _rango(a)
            fib, ffb = _rango(b)
            if not (fia and ffa and fib and ffb):
                continue
            # solapan si a.inicio <= b.fin y b.inicio <= a.fin
            if fia <= ffb and fib <= ffa:
                cruces += 1
                print(f"FRASE: {frase!r}")
                print(f"   A) cod={a.get('codigo')} sede={a.get('sede')} cargo={a.get('cargo')} "
                      f"[{fia} -> {ffa}]")
                print(f"   B) cod={b.get('codigo')} sede={b.get('sede')} cargo={b.get('cargo')} "
                      f"[{fib} -> {ffb}]")
                print(f"   SOLAPE: {max(fia,fib)} -> {min(ffa,ffb)}\n")

if cruces == 0:
    print("No se encontraron cruces (ninguna frase repetida con fechas solapadas).")
else:
    print(f"TOTAL de cruces detectados: {cruces}")

# tambien listar frases repetidas (aunque no solapen) por si acaso
print("\n=== Frases que se repiten en varias campanias ===")
rep = {f: l for f, l in por_frase.items() if len(l) > 1}
for f, l in rep.items():
    print(f"  {len(l)}x  {f!r}")
if not rep:
    print("  (ninguna frase repetida)")
