-- Procedimiento para limpiar tarotistas huérfanas
-- Fecha: 31/07/2025

DELIMITER $$

DROP PROCEDURE IF EXISTS panel_tarot.cleanup_tarotistas_huerfanas$$

CREATE PROCEDURE panel_tarot.cleanup_tarotistas_huerfanas()
BEGIN
    DECLARE affected_rows INT DEFAULT 0;
    
    -- Actualizar estado de sincronización
    UPDATE panel_tarot.tarotistas t
    LEFT JOIN asterisk.agentes a ON t.codigo_agente = a.usuario
    SET 
        t.existe_en_centralita = CASE WHEN a.usuario IS NOT NULL THEN TRUE ELSE FALSE END,
        t.centralita_sync_status = CASE 
            WHEN a.usuario IS NULL THEN 'no_existe_en_centralita'
            WHEN a.activo = 0 THEN 'inactivo_en_centralita'
            WHEN a.sync_with_panel = 0 THEN 'no_visible_en_panel'
            ELSE 'sincronizado'
        END,
        t.ultima_actualizacion = NOW();
    
    -- Desactivar tarotistas que no existen en asterisk
    UPDATE panel_tarot.tarotistas t
    SET 
        t.activo = 0,
        t.estado_actual = 'offline',
        t.ultima_actualizacion = NOW()
    WHERE t.centralita_sync_status = 'no_existe_en_centralita'
      AND t.activo = 1;
    
    SET affected_rows = ROW_COUNT();
    
    -- Registrar en log
    IF affected_rows > 0 THEN
        INSERT INTO panel_tarot.sync_log (
            proceso, 
            descripcion, 
            registros_afectados, 
            fecha
        ) VALUES (
            'cleanup_tarotistas_huerfanas',
            CONCAT('Desactivadas ', affected_rows, ' tarotistas sin agente en asterisk'),
            affected_rows,
            NOW()
        );
    END IF;
    
    -- Retornar resumen
    SELECT 
        'RESUMEN LIMPIEZA' as proceso,
        affected_rows as tarotistas_desactivadas,
        (SELECT COUNT(*) FROM panel_tarot.tarotistas WHERE centralita_sync_status = 'no_existe_en_centralita') as total_huerfanas,
        (SELECT COUNT(*) FROM panel_tarot.tarotistas WHERE centralita_sync_status = 'sincronizado') as total_sincronizadas,
        NOW() as fecha_ejecucion;
END$$

DELIMITER ;

-- Crear tabla de logs si no existe
CREATE TABLE IF NOT EXISTS panel_tarot.sync_log (
    id INT AUTO_INCREMENT PRIMARY KEY,
    proceso VARCHAR(100),
    descripcion TEXT,
    registros_afectados INT DEFAULT 0,
    fecha TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    INDEX idx_proceso_fecha (proceso, fecha)
);

-- Ejecutar limpieza inicial
CALL panel_tarot.cleanup_tarotistas_huerfanas();