import os
import pymysql
import requests
import argparse
from dotenv import load_dotenv

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
}

CHATFUEL_BOT_ID_B = os.getenv("CHATFUEL_BOT_ID_B")
CHATFUEL_TOKEN_B = os.getenv("CHATFUEL_TOKEN_B")

CHATFUEL_URL = f"https://api.chatfuel.com/whatsapp/bots/{CHATFUEL_BOT_ID_B}/contacts?chatfuel_token={CHATFUEL_TOKEN_B}"
HEADERS = {"Content-Type": "application/json"}


# ===============================
# TRAER REGISTROS YA ENVIADOS (ruta_b)
# ===============================
def fetch_regularizacion(limit=100):
    conn = pymysql.connect(**DB_CONFIG)
    try:
        with conn.cursor() as cur:
            cur.execute("""
                SELECT *
                FROM Lead_entrantes
                WHERE enviado_ruta_b = 1
                  AND phone_norm_gen IS NOT NULL
                  AND phone_norm_gen != ''
                ORDER BY fecha_envio_ruta_b DESC
                LIMIT %s
            """, (int(limit),))
            return cur.fetchall()
    finally:
        conn.close()


# ===============================
# ENVÍO A CHATFUEL (MISMO PAYLOAD)
# ===============================
def enviar_chatfuel(lead, debug=False):
    phone = (lead.get("phone_norm_gen") or "").strip()

    def safe(v):
        return "" if v is None else str(v)

    payload = {
        "phone": phone,
        "attributes": {
            "whatsapp_phone": phone,

            "crm Fecha_ingreso": safe(lead.get("Fecha_ingreso")),
            "crm Hora_ingreso": safe(lead.get("Hora_ingreso")),
            "crm ID_centralizador": safe(lead.get("ID_centralizador")),
            "crm Estado": safe(lead.get("Estado")),

            "crm ID_cliente": safe(lead.get("ID_cliente")),
            "crm_ID_cliente": safe(lead.get("ID_cliente")),

            "crm medio id": safe(lead.get("ID_medio_llegada")),
            "crm Medio_llegada": safe(lead.get("Medio_llegada")),

            "crm Rut_cliente": safe(lead.get("Rut_cliente")),
            "crm Nombre_cliente": safe(lead.get("Nombre_cliente")),
            "crm Apellido_cliente": safe(lead.get("Apellido_cliente")),

            "crm Proyecto": safe(lead.get("Proyecto")),
            "crm ID_proyecto": safe(lead.get("ID_proyecto")),

            "crm Nombre_vendedor": safe(lead.get("Nombre_vendedor")),
            "crm Email_vendedor": safe(lead.get("Email_vendedor")),
            "crm Rut_vendedor": safe(lead.get("Rut_vendedor")),

            "crm Email_cliente": safe(lead.get("Email_cliente")),

            "Activar_Contacto": "Dos"
        },
        "invokeTriggers": True,
        "tagNames": ["Nuevo_lead"]
    }

    if debug:
        import json
        print("\n🧪 PAYLOAD REAL:")
        print(json.dumps(payload, indent=2, ensure_ascii=False))
        return True, "DEBUG"

    try:
        r = requests.post(CHATFUEL_URL, json=payload, headers=HEADERS, timeout=20)
        if r.status_code != 200:
            return False, f"HTTP {r.status_code}: {r.text[:400]}"
        return True, None
    except Exception as e:
        return False, f"{type(e).__name__}: {e}"
# ===============================
# PROCESO
# ===============================
def procesar(modo_test=False, limit=100):
    leads = fetch_regularizacion(limit=limit)

    print(f"🔄 Regularización: {len(leads)} registros")
    print(f"🧪 MODO TEST: {'ACTIVADO' if modo_test else 'DESACTIVADO'}")

    enviados = 0
    errores = 0

    for lead in leads:
        phone = lead.get("phone_norm_gen")

        ok, err = enviar_chatfuel(lead, debug=modo_test)

        if ok:
            enviados += 1
            print(f"✔ Reenviado: {phone}")
        else:
            errores += 1
            print(f"❌ Error: {phone} → {err}")

        if modo_test:
            print("🧪 TEST → se detiene")
            break

    print(f"✅ OK: {enviados} | ❌ Errores: {errores}")


# ===============================
# MAIN
# ===============================
if __name__ == "__main__":
    parser = argparse.ArgumentParser(description="Regularización Chatfuel (reenvío ruta B)")
    parser.add_argument("--test", action="store_true", help="Solo 1 envío")
    parser.add_argument("--limit", type=int, default=100, help="Cantidad a procesar")
    args = parser.parse_args()

    procesar(modo_test=args.test, limit=args.limit)