-- Script de sincronización de agentes (asterisk) → tarotistas (panel_tarot)
-- Fecha: 31/07/2025

-- 1. Backup de la tabla tarotistas actual
CREATE TABLE IF NOT EXISTS panel_tarot.tarotistas_backup_20250731 AS 
SELECT * FROM panel_tarot.tarotistas;

-- 2. Insertar agentes que no existen en tarotistas
INSERT INTO panel_tarot.tarotistas (
    codigo_agente,
    extension,
    agente_usuario,
    nombre,
    apellidos,
    descripcion,
    estado_actual,
    activo,
    orden_display,
    telefono_contacto,
    valoracion,
    valoracion_visa,
    proveedor_id,
    sync_with_asterisk,
    last_sync_from_asterisk
)
SELECT 
    a.usuario as codigo_agente,
    a.usuario as extension,  -- Usar código como extensión por defecto
    a.usuario as agente_usuario,
    a.nombre,
    a.apellidos,
    a.descripcion,
    CASE 
        WHEN a.estado_login = 0 THEN 'offline'
        WHEN a.estado_ocupacion = 1 THEN 'ocupado'
        WHEN a.dnd_status = 1 THEN 'pausa'
        ELSE 'disponible'
    END as estado_actual,
    a.activo,
    a.orden_display,
    a.telefono as telefono_contacto,
    3 as valoracion,  -- Valoración inicial media
    3 as valoracion_visa,
    1 as proveedor_id,  -- Proveedor por defecto
    1 as sync_with_asterisk,
    NOW() as last_sync_from_asterisk
FROM asterisk.agentes a
LEFT JOIN panel_tarot.tarotistas t ON a.usuario = t.codigo_agente
WHERE a.activo = 1 
  AND t.id IS NULL;

-- 3. Actualizar tarotistas existentes con datos de agentes
UPDATE panel_tarot.tarotistas t
INNER JOIN asterisk.agentes a ON t.codigo_agente = a.usuario
SET 
    t.nombre = a.nombre,
    t.apellidos = a.apellidos,
    t.telefono_contacto = COALESCE(a.telefono, t.telefono_contacto),
    t.estado_actual = CASE 
        WHEN a.estado_login = 0 THEN 'offline'
        WHEN a.estado_ocupacion = 1 THEN 'ocupado'
        WHEN a.dnd_status = 1 THEN 'pausa'
        ELSE 'disponible'
    END,
    t.activo = a.activo,
    t.last_sync_from_asterisk = NOW()
WHERE a.activo = 1;

-- 4. Desactivar tarotistas que no existen en agentes
UPDATE panel_tarot.tarotistas t
LEFT JOIN asterisk.agentes a ON t.codigo_agente = a.usuario
SET 
    t.activo = 0,
    t.estado_actual = 'offline',
    t.ultima_actualizacion = NOW()
WHERE (a.id IS NULL OR a.activo = 0) 
  AND t.activo = 1
  AND t.sync_with_asterisk = 1;

-- 5. Actualizar la tabla de estados unificados
INSERT INTO asterisk.agent_unified_state (
    agent_code,
    agent_name,
    login_state,
    occupation_state,
    dnd_state,
    update_source
)
SELECT 
    usuario,
    nombre,
    estado_login,
    estado_ocupacion,
    dnd_status,
    'SYNC_SCRIPT'
FROM asterisk.agentes
WHERE activo = 1
ON DUPLICATE KEY UPDATE
    agent_name = VALUES(agent_name),
    login_state = VALUES(login_state),
    occupation_state = VALUES(occupation_state),
    dnd_state = VALUES(dnd_state),
    update_source = 'SYNC_SCRIPT';

-- 6. Mostrar resumen
SELECT 
    'Resumen de sincronización' as info,
    (SELECT COUNT(*) FROM asterisk.agentes WHERE activo = 1) as agentes_activos,
    (SELECT COUNT(*) FROM panel_tarot.tarotistas WHERE activo = 1) as tarotistas_activas,
    (SELECT COUNT(*) FROM panel_tarot.tarotistas WHERE last_sync_from_asterisk > DATE_SUB(NOW(), INTERVAL 1 MINUTE)) as tarotistas_sincronizadas;