import os
import pymysql
import json
import requests
import time

from dotenv import load_dotenv

load_dotenv()

# ============================
# CONFIGURACIÓN DESDE ENV
# ============================
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 = os.getenv("CHATFUEL_BOT_ID")
CHATFUEL_TOKEN = os.getenv("CHATFUEL_TOKEN")

CHATFUEL_URL = (
    f"https://api.chatfuel.com/whatsapp/bots/"
    f"{CHATFUEL_BOT_ID}/contacts?chatfuel_token={CHATFUEL_TOKEN}"
)

HEADERS = {"Content-Type": "application/json"}


# ============================
# OBTENER LEADS A PROCESAR
# ============================
def fetch_leads():
    conn = pymysql.connect(**DB_CONFIG)
    try:
        with conn.cursor() as cur:
            sql = """
                SELECT ID_centralizador, phone_norm_gen
                FROM Lead_entrantes
                WHERE Estado_telefono IS NULL
            """
            cur.execute(sql)
            return cur.fetchall()
    finally:
        conn.close()


# ============================
# GUARDAR RESPUESTA
# ============================
def save_response(id_centralizador, respuesta_cf):
    conn = pymysql.connect(**DB_CONFIG)
    try:
        with conn.cursor() as cur:
            sql = """
                UPDATE Lead_entrantes
                SET Estado_telefono = %s
                WHERE ID_centralizador = %s
            """
            cur.execute(sql, (str(respuesta_cf), id_centralizador))
        conn.commit()
    finally:
        conn.close()


# ============================
# ENVIAR A CHATFUEL
# ============================
def enviar_chatfuel(phone):
    payload = {
        "phone": phone or "",   # si viene NULL, igual enviamos una cadena vacía
        "attributes": {
            "whatsapp_phone": phone or "",
            "actualizado": "Actualizado"
        },
        "tagNames": ["Nuevo_lead"]
    }

    try:
        r = requests.post(CHATFUEL_URL, data=json.dumps(payload), headers=HEADERS)
        return {
            "status_code": r.status_code,
            "text": r.text
        }
    except Exception as e:
        return {"error": str(e)}


# ============================
# PROCESO PRINCIPAL
# ============================
def procesar():
    leads = fetch_leads()

    print(f"🔍 Leads pendientes por enviar: {len(leads)}")

    contador = 0  # ← contador de envíos

    for lead in leads:
        id_centralizador = lead["ID_centralizador"]
        phone = lead["phone_norm_gen"]

        print(f"📤 Enviando a Chatfuel → ID {id_centralizador}, phone={phone}")

        resp = enviar_chatfuel(phone)

        print(f"   → Respuesta Chatfuel: {resp}")

        save_response(id_centralizador, json.dumps(resp))

        contador += 1

        # Pausa normal entre envíos (si quieres mantenerla)

        # Cada 100 envíos → descanso adicional de 3 segundos
        if contador % 100 == 0:
            print("⏳ Descanso: 100 envíos completados, esperando 35 Segundos...")
            time.sleep(5)


if __name__ == "__main__":
    procesar()
