-- =============================================================================
-- Migration: Tickets System v2 - Prioridades, SLA y Audit Log
-- Fecha: 2026-02-10
-- Autor: CTNet Dev
-- =============================================================================

-- 1. Agregar columnas de prioridad y SLA a solicitudes
ALTER TABLE soporte_tecnico.solicitudes
  ADD COLUMN IF NOT EXISTS prioridad TINYINT DEFAULT 3 COMMENT '1=Critica,2=Alta,3=Media,4=Baja',
  ADD COLUMN IF NOT EXISTS sla_target_hours INT DEFAULT NULL COMMENT 'Horas objetivo SLA',
  ADD COLUMN IF NOT EXISTS sla_met TINYINT DEFAULT NULL COMMENT '1=cumplido,0=incumplido',
  ADD COLUMN IF NOT EXISTS fecha_resolucion DATETIME DEFAULT NULL COMMENT 'Timestamp de cierre';

-- 2. Indices para rendimiento en consultas frecuentes
ALTER TABLE soporte_tecnico.solicitudes
  ADD INDEX IF NOT EXISTS idx_prioridad (prioridad),
  ADD INDEX IF NOT EXISTS idx_estado_prioridad (estado, prioridad),
  ADD INDEX IF NOT EXISTS idx_fecha_creacion (fecha_creacion);

-- 3. Tabla de audit log universal
CREATE TABLE IF NOT EXISTS soporte_tecnico.audit_log (
  id INT AUTO_INCREMENT PRIMARY KEY,
  tabla VARCHAR(64) NOT NULL COMMENT 'Tabla afectada',
  registro_id INT NOT NULL COMMENT 'ID del registro',
  accion VARCHAR(32) NOT NULL COMMENT 'crear,actualizar,cerrar,asignar,eliminar',
  campo_modificado VARCHAR(64) DEFAULT NULL COMMENT 'Campo que cambió',
  valor_anterior TEXT DEFAULT NULL COMMENT 'Valor previo',
  valor_nuevo TEXT DEFAULT NULL COMMENT 'Valor nuevo',
  usuario VARCHAR(64) NOT NULL COMMENT 'Usuario que hizo el cambio',
  ip VARCHAR(45) DEFAULT NULL COMMENT 'IP del usuario',
  detalles JSON DEFAULT NULL COMMENT 'Metadata adicional',
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  INDEX idx_tabla_registro (tabla, registro_id),
  INDEX idx_accion (accion),
  INDEX idx_usuario (usuario),
  INDEX idx_created (created_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- 4. Agregar prioridad normalizada a solicitudes_interno
ALTER TABLE soporte_tecnico.solicitudes_interno
  ADD COLUMN IF NOT EXISTS prioridad TINYINT DEFAULT 3 COMMENT '1=Critica,2=Alta,3=Media,4=Baja';

-- 5. Mapear urgencia existente a nueva prioridad (si columna urgencia existe)
-- urgencia 1 -> prioridad 1 (Critica), urgencia 2 -> prioridad 2 (Alta), etc.
UPDATE soporte_tecnico.solicitudes_interno 
SET prioridad = CASE 
    WHEN urgencia = 1 THEN 1
    WHEN urgencia = 2 THEN 2
    WHEN urgencia = 3 THEN 3
    WHEN urgencia = 4 THEN 4
    ELSE 3
END
WHERE prioridad = 3 AND urgencia IS NOT NULL;

-- 6. Calcular SLA target para solicitudes existentes según tipo
UPDATE soporte_tecnico.solicitudes
SET sla_target_hours = CASE tipo
    WHEN 'Falla' THEN 4
    WHEN 'Instalacion' THEN 24
    WHEN 'Mantenimiento' THEN 48
    WHEN 'Cambios' THEN 24
    ELSE 24
END
WHERE sla_target_hours IS NULL;
