import mysql.connector
import argparse
from datetime import datetime
from db_utils import get_db, save_message, normalizephone
import re

from dotenv import load_dotenv
load_dotenv()

def parse_datos(raw):
    partes = raw.split('%%')
    return {partes[i]: partes[i + 1] for i in range(0, len(partes) - 1, 2)}


def importar_meta_leads(job_id, proyecto, user_id):
    print("-----------------------------------------")
    print(f"Importando leads de Meta - {proyecto} - {job_id}")
    print("-----------------------------------------")
    db = get_db()
    cursor = db.cursor(dictionary=True)

    
    cursor.execute("SELECT * FROM nsjobitems WHERE job = %s AND (servidor is null or servidor not in ('Ok', 'Ok2')) ORDER BY id ASC", (job_id,))
    items = cursor.fetchall()

    for item in items:
        #print(item['datos'])
        datos = parse_datos(item['datos'])
        #print(f"Importando lead: {item['id']} - {datos}")
        id_jobitem = datos.get("id")
        estado = datos.get("estado")
        full_name = datos.get("full_name") or datos.get("nombre") or "Sin nombre"
        email = datos.get("email") or datos.get("email_show") 
        if "@" in full_name:
            # Intercambia los valores
            full_name, email = email, full_name        
    
        phone = datos.get("phone_number") or datos.get("tel")
        phone = normalizephone(phone)



        #print("Full name: ", full_name)
        #print("Email: ", email)        
        created = datos.get("created_time") or datetime.now().isoformat()
        
        content = ""
        for key, value in datos.items():
            if key not in ["id", "estado", "created_time"]:
                content += f"{key}: {value}\n"
        #content = item["datos"]

        if not phone:
            print(f"⚠️ Lead sin teléfono: ID {item['id']}")
            continue

        # Obtener campaña
        cursor.execute("SELECT titulo FROM nsjobs WHERE id = %s", (item["job"],))
        row = cursor.fetchone()
        campana = row["titulo"] if row else "Meta"

        # Verificar si ya existe el contacto
        #cursor.execute("SELECT id FROM contact WHERE phone = %s AND source = 'Meta'", (phone,))
        cursor.execute("SELECT id, phone, email FROM contact WHERE phone = %s", (phone,))
        row = cursor.fetchone()
        if not row:
            cursor.execute("SELECT id, phone, email FROM contact WHERE email = %s", (email,))
            row = cursor.fetchone()

        if row:
            contact_id = row["id"]
            if row["phone"] != phone or row["email"] != email:
                try:
                    print(f"⚠️ Lead con teléfono/email diferente: {phone} {email} vs {row['phone']} {row['email']}")
                    # Actualizar el contacto
                    cursor.execute("UPDATE contact SET phone = %s, email = %s WHERE id = %s", (phone, email, contact_id))
                    db.commit()  
                except Exception as e:
                    print(f"❌ Warning al ejecutar la operación de SQL: {e}")
            if estado == "Contesto":
                cursor.execute("UPDATE contact SET is_lead = 1 WHERE id = %s", (contact_id,))
                db.commit()
        else:
            is_lead = estado == "Contesto"
            cursor.execute("""
                INSERT INTO contact (name, email, phone, source, is_lead, proyecto, campana, alta, status)
                VALUES (%s, %s, %s, %s, %s, %s, %s, NOW(), 'new')
            """, (full_name, email, phone, "Meta", is_lead, proyecto, campana))
            db.commit()
            contact_id = cursor.lastrowid

        # Evitar duplicados
        cursor.execute("SELECT id FROM message WHERE contact_id = %s AND timestamp = %s  and direction = 'incoming'", (contact_id, created))
        if cursor.fetchone():
            print(f"📌 Mensaje duplicado: contacto {contact_id} en {created}")
            continue

        cursor.execute("""
            INSERT INTO message (
                user_id, contact_id, direction, content, timestamp,
                channel, subject, address, addressname
            )
            VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s)
        """, (
            user_id, contact_id, 'incoming', content, created,
            'Meta', 'Completó formulario Meta', phone, full_name
        ))

        cursor.execute("update nsjobitems set servidor = 'Ok' where id = %s", (item["id"],))
        db.commit()
        print(f"✅ Lead importado: {full_name} ({phone} - {email})")
        

if __name__ == "__main__":
    
    parser = argparse.ArgumentParser()
    parser.add_argument("--user", required=True, type=int, help="ID del usuario (nsjobitems.user")
    parser.add_argument("--job", required=True, type=int, help="ID del job (nsjobitems.job)")
    parser.add_argument("--proyecto", required=True, help="Nombre del proyecto")
    args = parser.parse_args()
    
    importar_meta_leads(args.job, args.proyecto, args.user)
