import mysql.connector
from datetime import datetime
from db_utils import get_db, normalizephone

def importar_whatsapp_logs():
    print("---------------------------------------------")
    print("Importando logs de WhatsApp - Todos los registros")
    print("---------------------------------------------")
    db = get_db()
    cursor = db.cursor(dictionary=True)

    cursor.execute("""
        SELECT * FROM nslog
        WHERE accion IN ('Contesto WP', 'WP message')
        AND detalles != '' and mail not like '%@g.us' and mail not like '%@broadcast'
        AND detalles IS NOT NULL
        and (status is null or status != 1)
        ORDER BY id ASC
    """)
    logs = cursor.fetchall()

    for log in logs:
        try:
            # Obtener target y source del log
            target = log["target"]
            source = log["source"]
            
            # Limpiar números (quitar @c.us)
            if target and '@c.us' in target:
                target = target.replace('@c.us', '')
            if source and '@c.us' in source:
                source = source.replace('@c.us', '')
            
            target = normalizephone(target) if target else None
            source = normalizephone(source) if source else None
            
            print(f"🔍 Analizando log {log['id']}: target={target}, source={source}")
            
            # Buscar si source está en cmtelwp
            user_phone = None
            contact_phone = None
            direction = None
            
            # Verificar source primero
            if source:
                cursor.execute("SELECT numeronormalizado FROM cmtelwp WHERE numeronormalizado = %s", (source,))
                source_result = cursor.fetchone()
                cursor.fetchall()  # Consumir cualquier resultado restante
                
                if source_result:
                    # Source está en cmtelwp, es un mensaje saliente
                    direction = "outgoing"
                    user_phone = source
                    contact_phone = target
                    print(f"✅ Source encontrado en cmtelwp: {source} -> OUTGOING")
                else:
                    # Source no está en cmtelwp, verificar si target está
                    if target:
                        cursor.execute("SELECT numeronormalizado FROM cmtelwp WHERE numeronormalizado = %s", (target,))
                        target_result = cursor.fetchone()
                        cursor.fetchall()  # Consumir cualquier resultado restante
                        
                        if target_result:
                            # Target está en cmtelwp, es un mensaje entrante
                            direction = "incoming"
                            user_phone = target
                            contact_phone = source
                            print(f"✅ Target encontrado en cmtelwp: {target} -> INCOMING")
                        else:
                            print(f"⚠️ Ni source ({source}) ni target ({target}) están en cmtelwp")
                            continue
                    else:
                        print(f"⚠️ Source no está en cmtelwp y no hay target válido")
                        continue
            else:
                # No hay source, verificar solo target
                if target:
                    cursor.execute("SELECT numeronormalizado FROM cmtelwp WHERE numeronormalizado = %s", (target,))
                    target_result = cursor.fetchone()
                    cursor.fetchall()  # Consumir cualquier resultado restante
                    
                    if target_result:
                        direction = "incoming"
                        user_phone = target
                        contact_phone = None  # No hay source para determinar contacto
                        print(f"✅ Target encontrado en cmtelwp: {target} -> INCOMING (sin source)")
                    else:
                        print(f"⚠️ Target no está en cmtelwp: {target}")
                        continue
                else:
                    print(f"⚠️ No hay source ni target válidos")
                    continue

            if not contact_phone:
                print(f"⚠️ No se puede determinar el contacto para el mensaje")
                continue

            print(f"🔍 Direccion: {direction} {contact_phone} ({user_phone})")
            content = log["detalles"]
            timestamp = log["created"] if "created" in log and log["created"] else datetime.now()
            print(f"📱 {timestamp} {direction} - {contact_phone} ({user_phone}) : {content}")

            # Buscar usuario en cmtelwp
            cursor.execute("SELECT usuario FROM cmtelwp WHERE numeronormalizado = %s", (user_phone,))
            row = cursor.fetchone()
            cursor.fetchall()  # Consumir cualquier resultado restante
            
            if not row:
                print(f"⚠️ Usuario no encontrado en cmtelwp: {user_phone}")
                continue
            user_id = row["usuario"]

            # Buscar contacto por phone
            cursor.execute("SELECT id FROM contact WHERE phone = %s", (contact_phone,))
            row = cursor.fetchone()
            cursor.fetchall()  # Consumir cualquier resultado restante
            
            if not row:
                print(f"⚠️ Contacto no encontrado: {contact_phone}")
                continue
            
            contact_id = row["id"]

            # Evitar duplicados por contenido y timestamp
            cursor.execute("""
                SELECT id FROM message
                WHERE contact_id = %s AND user_id = %s AND content = %s AND timestamp = %s
            """, (contact_id, user_id, content, timestamp))
            duplicate_check = cursor.fetchone()
            cursor.fetchall()  # Consumir cualquier resultado restante
            
            if duplicate_check:
                print(f"📌 Mensaje duplicado: contacto {contact_phone} a las {timestamp}")
                continue

            # Insertar mensaje
            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, direction, content, timestamp,
                'WhatsApp', 'Mensaje de WhatsApp', contact_phone, contact_phone
            ))
            db.commit()

            cursor.execute("update nslog set status = 1 where id = %s", (log["id"],))
            db.commit()

            print(f"✅ Mensaje guardado: {direction} {contact_phone} ({user_phone})")
            
        except Exception as e:
            print(f"❌ Error procesando log {log['id']}: {str(e)}")
            continue

if __name__ == "__main__":
    importar_whatsapp_logs()
