import os
from datetime import datetime
from webwhatsapi import WhatsAPIDriver
import mysql.connector
from dotenv import load_dotenv
from db_utils import get_db, save_message

load_dotenv()
WHATSAPP_FETCH_LIMIT = int(os.getenv("WHATSAPP_FETCH_LIMIT", 50))

def save_message_if_new(db, user_id, name, identifier, source, direction, content, timestamp, channel):
    cursor = db.cursor()

    # Insertar o buscar contacto
    cursor.execute("SELECT id FROM contact WHERE number_or_email = %s AND source = %s", (identifier, source))
    row = cursor.fetchone()
    if row:
        contact_id = row[0]
    else:
        cursor.execute("INSERT INTO contact (name, number_or_email, source) VALUES (%s, %s, %s)",
                       (name, identifier, source))
        db.commit()
        contact_id = cursor.lastrowid

    # Verificar si el mensaje ya fue guardado
    cursor.execute("SELECT id FROM message WHERE user_id = $s AND contact_id = %s AND timestamp = %s AND content = %s",
                   (user_id, contact_id, timestamp, content))
    if cursor.fetchone():
        print(f"⚠️ Mensaje duplicado (WhatsApp) @ {timestamp}")
        return

    cursor.execute("""
        INSERT INTO message (user_id, contact_id, direction, content, timestamp, channel)
        VALUES (%s, %s, %s, %s, %s, %s)
    """, (user_id, contact_id, direction, content, timestamp, channel))
    db.commit()

def importar_whatsapp(usuario):
    db = get_db()
    print(f"🔗 Escaneá QR para {usuario['name']} ({usuario['whatsapp_number']})")
    driver = WhatsAPIDriver(headless=True)
    driver.wait_for_login()
    print("✅ Conectado")

    for chat in driver.get_all_chats():
        name = chat.name
        identifier = chat.id
        for msg in chat.get_messages()[-50:]:
            save_message_if_new(
                db, usuario['id'], name, identifier, 'whatsapp',
                'outgoing' if msg.from_me else 'incoming',
                msg.content, msg.timestamp, 'whatsapp'
            )


def main():
    db = get_db()
    cursor = db.cursor(dictionary=True)
    cursor.execute("SELECT * FROM user_account WHERE whatsapp_number IS NOT NULL")
    usuarios = cursor.fetchall()
    for usuario in usuarios:
        importar_whatsapp(usuario)

if __name__ == '__main__':
    main()
