-- La pantalla "Reportes" se dividio en 12 pantallas propias (una por reporte),
-- agrupadas bajo un nuevo grupo de menu "Reportes" (posicion 6). El menu lateral
-- se gatea 100% desde menu_groups/menu_items/menu_role_access (ver 010_menu_sync.sql)
-- -- sin filas nuevas aca, applyRoleMenu() en el frontend oculta cualquier
-- view_key que no exista en la matriz, asi que el grupo entero quedaba invisible
-- para todos los roles (incluido admin) hasta correr esta migracion.

-- 1) Nuevo grupo "Reportes" en posicion 6; DINAVISA/Parametros/Sistema corren un lugar.
INSERT INTO menu_groups (id, code, name, color, sort_order, is_active)
SELECT 9, 'reportes', '6 - Reportes', 'reportes', 6, 1
WHERE NOT EXISTS (SELECT 1 FROM menu_groups WHERE code = 'reportes');

UPDATE menu_groups SET name = '7 - DINAVISA / Compliance', sort_order = 7 WHERE code = 'dinavisa';
UPDATE menu_groups SET name = '8 - Parámetros', sort_order = 8 WHERE code = 'parametros';
UPDATE menu_groups SET name = '9 - Sistema', sort_order = 9 WHERE code = 'sistema';

-- 2) Los 12 reportes, cada uno como su propio menu_item dentro de "Reportes".
INSERT INTO menu_items (group_id, view_key, name, sort_order, is_active)
SELECT g.id, x.view_key, x.name, x.sort_order, 1
FROM menu_groups g
CROSS JOIN (
  SELECT 'rep_stock' AS view_key, 'Stock Actual' AS name, 1 AS sort_order
  UNION ALL SELECT 'rep_movements', 'Movimientos', 2
  UNION ALL SELECT 'rep_recalls', 'Recalls DINAVISA', 3
  UNION ALL SELECT 'rep_controlled_trace', 'Trazabilidad de Controlados', 4
  UNION ALL SELECT 'rep_expiring', 'Vencimientos Proximos', 5
  UNION ALL SELECT 'rep_temperature', 'Temperatura', 6
  UNION ALL SELECT 'rep_audit_trail', 'Audit Trail DINAVISA', 7
  UNION ALL SELECT 'rep_batch_trace', 'Trazabilidad por Lote', 8
  UNION ALL SELECT 'rep_access_log', 'Log de Accesos', 9
  UNION ALL SELECT 'rep_inventory', 'Inventario Valorizado', 10
  UNION ALL SELECT 'rep_transfer_requests', 'Solicitudes de Traslado', 11
  UNION ALL SELECT 'rep_transfer_requests_detail', 'Solic. Traslado (Detalle)', 12
) x
WHERE g.code = 'reportes'
  AND NOT EXISTS (SELECT 1 FROM menu_items WHERE view_key = x.view_key);

-- 3) Cada reporte nuevo hereda el mismo acceso por rol que tenia el item viejo
--    "reportes" (admin/jefe/qa_liberador/supervisor/xpert=FULL, auditor=READ,
--    op_almacen sin fila = sin acceso) -- no hace falta curarlo a mano.
INSERT INTO menu_role_access (menu_item_id, role, access_type)
SELECT ni.id, old_access.role, old_access.access_type
FROM menu_items ni
JOIN (
  SELECT a.role, a.access_type
  FROM menu_role_access a
  JOIN menu_items i ON i.id = a.menu_item_id
  WHERE i.view_key = 'reportes'
) old_access ON 1=1
WHERE ni.view_key IN (
  'rep_stock','rep_movements','rep_recalls','rep_controlled_trace','rep_expiring',
  'rep_temperature','rep_audit_trail','rep_batch_trace','rep_access_log',
  'rep_inventory','rep_transfer_requests','rep_transfer_requests_detail'
)
AND NOT EXISTS (
  SELECT 1 FROM menu_role_access existing
  WHERE existing.menu_item_id = ni.id AND existing.role = old_access.role
);

-- 4) El item viejo "reportes" ya no existe en el menu real -- queda inactivo
--    en vez de borrado, mismo criterio que 010_menu_sync.sql paso 4.
UPDATE menu_items SET is_active = 0 WHERE view_key = 'reportes';
