import os
import pymysql
import logging
from dotenv import load_dotenv
from crear_contacto import create_contact, verificar_respuesta_post_lead, clean_phone_number, _parse_datetime_db

# Configuración básica
logging.basicConfig(level=logging.INFO, format='%(asctime)s [%(levelname)s] %(message)s')
load_dotenv()

DB_CONFIG = {
    'host': os.getenv('DB_HOST'),
    'user': os.getenv('DB_USER'),
    'password': os.getenv('DB_PASSWORD'),
    'database': os.getenv('DB_NAME'),
    'cursorclass': pymysql.cursors.DictCursor
}

def get_expirados():
    """Obtiene leads expirados SOLO desde el 26 Nov 2025 en adelante."""
    conn = pymysql.connect(**DB_CONFIG)
    try:
        with conn.cursor() as cur:
            # 🟩 CAMBIO AQUÍ: Agregamos el filtro de fecha
            sql = """
                SELECT * FROM Lead_entrantes 
                WHERE enviado_cf_2 = 'expirado_fase1'
                  AND Now >= '2025-11-26 00:00:00'
            """
            cur.execute(sql)
            return cur.fetchall()
    finally:
        conn.close()

def update_db(id_centralizador, estado):
    conn = pymysql.connect(**DB_CONFIG)
    try:
        with conn.cursor() as cur:
            sql = "UPDATE Lead_entrantes SET enviado_cf_2 = %s WHERE ID_centralizador = %s"
            cur.execute(sql, (estado, id_centralizador))
        conn.commit()
    finally:
        conn.close()

def procesar_rescate():
    leads = get_expirados()
    
    if not leads:
        logging.info("✅ No se encontraron leads expirados desde el 26-11-2025.")
        return

    logging.info(f"🚀 Iniciando rescate de {len(leads)} leads (Desde 26 Nov)...")

    for lead in leads:
        id_cent = lead['ID_centralizador']
        fecha_now = _parse_datetime_db(lead['Now'])
        
        # Usamos el campo nuevo, o el antiguo si falla
        raw_phone = lead.get('phone_norm_gen') or lead.get('Numero_telefono_movil_cliente')
        phone = clean_phone_number(raw_phone)

        # 1. EL FILTRO DE ORO: ¿Conversó después de llegar?
        if verificar_respuesta_post_lead(phone, fecha_now):
            logging.info(f"✋ ID {id_cent}: Cliente YA conversó. Cerrando caso.")
            update_db(id_cent, 'final_respondio') # Usamos nombre limpio
            continue

        # 2. Si no ha conversado, FORZAMOS el envío
        logging.info(f"⚡ ID {id_cent}: No ha conversado. Forzando envío Dos...")
        
        lead_data = dict(lead)
        lead_data['Activar_Contacto'] = 'Dos' 
        
        # Llamamos a tu función existente
        resp = create_contact(lead_data)
        
        if not resp.get('error'):
            logging.info(f"✅ ID {id_cent}: Rescate exitoso.")
            update_db(id_cent, 'final') # Usamos nombre limpio
        else:
            logging.error(f"❌ ID {id_cent}: Falló rescate. {resp.get('error')}")

if __name__ == '__main__':
    procesar_rescate()