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 estado != 'Pendiente' AND servidor = 'Ok' 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, contenido FROM nsjobs WHERE id = %s", (item["job"],))
        row = cursor.fetchone()
        campana = row["titulo"] if row else "Meta"
        contenido = row["contenido"]

        # 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"]
        else:
            is_lead = estado == "Contesto"
            cursor.execute("""
                INSERT INTO contact (name, email, phone, source, is_lead, proyecto, campana, alta)
                VALUES (%s, %s, %s, %s, %s, %s, %s, NOW())
            """, (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 = 'outgoing'", (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)
        """, (
            -1, contact_id, 'outgoing', contenido, created,
            'Whatsapp', 'Se le envió whatsapp automático', phone, full_name
        ))

        cursor.execute("update nsjobitems set servidor = 'Ok2' where id = %s", (item["id"],))
        db.commit()
        print(f"✅ Mensaje 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)
