-- =============================================================================
-- Seguimiento RIM V2 — habilitación del módulo
-- Base: asercolg_po (conexión `mysql`) · MariaDB 10.6
-- Piloto aprobado: grupo empresarial 41 (Nestlé) · perfiles restringidos
-- Ver specs/SPEC_SeguimientoRIM_V2.MD §9 y §12 (punto 6)
-- =============================================================================
--
-- Sin estos dos pasos el módulo NO aparece en el menú, aunque las rutas existan:
--   1. una fila en `menus` con la ruta del contenedor iframe
--   2. el id de esa fila agregado al JSON `compania.aplicaciones` de cada
--      compañía que deba verlo
--
-- No se toca el menú 171 ni la V1: ambas conviven hasta que el piloto valide.
-- Este script es idempotente: se puede volver a correr sin duplicar nada.
--
-- =============================================================================
-- PASO 0 — Estado antes (ejecutar y guardar la salida)
-- =============================================================================

SELECT id, nombre, ruta, depende, orden, estado
  FROM menus
 WHERE ruta IN ('/rim/seguimiento', '/rim/seguimiento-v2');

SELECT c.id, c.razon_social, JSON_LENGTH(c.aplicaciones) AS aplicaciones,
       JSON_CONTAINS(c.aplicaciones, '171') AS tiene_v1
  FROM compania c
 WHERE c.id_grupo_empresarial = 41
   AND c.inactivo = 0
 ORDER BY c.id;

-- Esperado antes: solo /rim/seguimiento (id 171); 4 compañías (56, 57, 62, 63)
-- con 51 aplicaciones cada una y tiene_v1 = 1.


-- =============================================================================
-- PASO 1 y 2 — Alta del menú y asignación al piloto
-- =============================================================================

START TRANSACTION;

-- 1. El menú. Mismos `nivel`, `depende`, `target` y `regimen` que el 171;
--    `orden` 18 para que quede inmediatamente debajo de la V1.
--    `perfiles` restringido al piloto: perfil 1 (admin) y 2, más los cuatro
--    usuarios nominales que ya tiene el menú 171.
INSERT INTO menus
      (nombre,                descripcion,
       nivel, imagen, svg, depende, ruta,                  target,
       perfiles,
       regimen, orden, estado, id_grupo_empresarial, created_at,        updated_at)
SELECT 'Seguimiento RIM V2',  'Triaje de Registros de Importacion por vencimiento (V2)',
       3,     NULL,   NULL, 3,       '/rim/seguimiento-v2', '_self',
       '{"perfil":[1,2], "usuario":[291,292,319,348]}',
       'I',   18,    1,      0,                    NOW(),             NOW()
  FROM DUAL
 WHERE NOT EXISTS (SELECT 1 FROM menus WHERE ruta = '/rim/seguimiento-v2');

SET @id_menu_v2 = (SELECT id FROM menus WHERE ruta = '/rim/seguimiento-v2' LIMIT 1);

SELECT @id_menu_v2 AS id_menu_v2_asignado;

-- 2. Las cuatro compañías del grupo 41. El guard con JSON_CONTAINS evita
--    duplicar el id si el script se vuelve a correr.
UPDATE compania
   SET aplicaciones = JSON_ARRAY_APPEND(aplicaciones, '$', @id_menu_v2),
       updated_at   = NOW()
 WHERE id_grupo_empresarial = 41
   AND inactivo = 0
   AND JSON_VALID(aplicaciones)
   AND JSON_CONTAINS(aplicaciones, CAST(@id_menu_v2 AS CHAR)) = 0;

-- Revisar la salida del SELECT de arriba y del PASO 3 ANTES de confirmar.
-- Si algo no cuadra:  ROLLBACK;
COMMIT;


-- =============================================================================
-- PASO 3 — Estado después
-- =============================================================================

SELECT id, nombre, ruta, depende, orden, estado, perfiles
  FROM menus
 WHERE ruta IN ('/rim/seguimiento', '/rim/seguimiento-v2');

SELECT c.id, c.razon_social, JSON_LENGTH(c.aplicaciones) AS aplicaciones,
       JSON_CONTAINS(c.aplicaciones, '171')                    AS tiene_v1,
       JSON_CONTAINS(c.aplicaciones, CAST(@id_menu_v2 AS CHAR)) AS tiene_v2
  FROM compania c
 WHERE c.id_grupo_empresarial = 41
   AND c.inactivo = 0
 ORDER BY c.id;

-- Esperado después: dos menús (171 y el nuevo); las 4 compañías con 52
-- aplicaciones, tiene_v1 = 1 y tiene_v2 = 1.


-- =============================================================================
-- DESHACER (si el piloto se cancela)
-- =============================================================================
--
-- Basta con desactivar el menú: es reversible en un campo y no toca el JSON de
-- ninguna compañía. Un menú con estado = 0 no se pinta, aunque su id siga
-- listado en `aplicaciones`.
--
--   UPDATE menus SET estado = 0, updated_at = NOW() WHERE ruta = '/rim/seguimiento-v2';
--
-- Las rutas /rim/seguimiento-v2 quedan accesibles por URL directa (como ~90
-- rutas más del proyecto: la autorización por perfil está comentada en
-- app/Http/Middleware/Authenticate.php). Si hace falta cerrarlas de verdad,
-- comentar las dos líneas en routes/web.php.


-- =============================================================================
-- PASO 4 — Salida del piloto (NO ejecutar todavía)
-- =============================================================================
--
-- Cuando el piloto valide, y previo aviso a los clientes por el cambio de la
-- tarjeta "Sin saldo" (de 10 a 72 registros en Nestlé, §12 punto 2):
--
--   a) Abrir los perfiles del menú V2 a los mismos del 171:
--      UPDATE menus
--         SET perfiles = (SELECT perfiles FROM menus WHERE id = 171),
--             updated_at = NOW()
--       WHERE ruta = '/rim/seguimiento-v2';
--
--   b) Agregar el id V2 a las 38 compañías que hoy tienen el 171:
--      SET @id_menu_v2 = (SELECT id FROM menus WHERE ruta = '/rim/seguimiento-v2' LIMIT 1);
--      UPDATE compania
--         SET aplicaciones = JSON_ARRAY_APPEND(aplicaciones, '$', @id_menu_v2),
--             updated_at = NOW()
--       WHERE inactivo = 0
--         AND JSON_VALID(aplicaciones)
--         AND JSON_CONTAINS(aplicaciones, '171') = 1
--         AND JSON_CONTAINS(aplicaciones, CAST(@id_menu_v2 AS CHAR)) = 0;
--
--   c) Retirar la V1:
--      UPDATE menus SET estado = 0, updated_at = NOW() WHERE id = 171;
