# diag_numero_chatwoot.py - Ver los mensajes de un numero en Chatwoot y que campania hace match.
import os
from dotenv import load_dotenv
import psycopg2
load_dotenv()

TEL = "8099166706"   # buscar por terminacion (sin prefijo pais)

dm_host=os.getenv("PG_HOST","191.98.134.81"); dm_db=os.getenv("PG_DATABASE","chatwoot_production")
dm_user=os.getenv("PG_USER","postgres"); dm_pass=os.getenv("PG_PASSWORD",""); dm_port=os.getenv("PG_PORT","5432")
conn=psycopg2.connect(host=dm_host,dbname=dm_db,user=dm_user,password=dm_pass,port=dm_port)
cur=conn.cursor()

# mensajes del contacto (por terminacion del telefono)
cur.execute("""
SELECT c.phone_number, m.id, m.created_at, m.sender_type, LEFT(m.content, 90)
FROM messages m
JOIN conversations cv ON m.conversation_id=cv.id
JOIN contacts c ON cv.contact_id=c.id
WHERE c.phone_number LIKE %s
ORDER BY m.id ASC
""", ('%'+TEL,))
rows=cur.fetchall()
print(f"\n=== Mensajes en Chatwoot del numero terminado en {TEL} ===\n")
if not rows:
    print("  (no se encontro el numero en Chatwoot)")
for ph,mid,fecha,stype,cont in rows:
    print(f"  [{ph}] {fecha}  {stype:8} | {cont}")

# ¿el primer mensaje del contacto hace match con alguna campania por texto?
print("\n=== Campanias cuyo texto aparece en algun mensaje de este numero ===")
cur.execute("""
SELECT map.codigo, map.cargo, map.fecha_inicio, map.fecha_fin, map.frase
FROM (VALUES
  (' 🖥️ Estoy interesado en sus Seminarios','Seminarios','74a','2026-04-01','2026-07-30'),
  ('👾Estoy interesado en el Seminario Refrigeración','CO2','80a','2026-05-15','2026-07-30')
) AS map(frase, cargo, codigo, fecha_inicio, fecha_fin)
WHERE EXISTS (
  SELECT 1 FROM messages m
  JOIN conversations cv ON m.conversation_id=cv.id
  JOIN contacts c ON cv.contact_id=c.id
  WHERE c.phone_number LIKE %s AND m.sender_type='Contact'
    AND m.content LIKE '%%'||map.frase||'%%'
)
""", ('%'+TEL,))
mt=cur.fetchall()
if not mt:
    print("  (ninguna de las 2 frases de ejemplo hizo match textual - revisar frase exacta)")
for cod,cargo,fi,ff,frase in mt:
    print(f"  codigo={cod} cargo={cargo} rango={fi}..{ff}  frase='{frase}'")

conn.close()
print("\nNOTA: si el match textual SI existe pero la fecha del mensaje esta fuera")
print("del rango de la campania, por eso NO cuenta como pauta (queda Copito).")
