-- ============================================
-- SCRIPT SQL PARA INSERTAR RUTAS DEL MENÚ
-- Sistema de Costos ABC - Sprint 1
-- ============================================

-- 1. MENÚ PRINCIPAL: Sistema de Costos
INSERT INTO modulo (nombre, descripcion, icono, tipo_componente, path, orden, padre, status_id, create_at, create_by) 
VALUES ('Sistema de Costos', 'Gestión de costos basado en ABC', 'calculator', 'Menu', NULL, 5, NULL, 1, NOW(), 'system');

-- 2. SUBMÓDULO: Dashboard
INSERT INTO modulo (nombre, descripcion, icono, tipo_componente, path, orden, padre, status_id, create_at, create_by) 
VALUES ('Dashboard', 'Panel de control de costos', 'layout-dashboard', 'Menu', '/costos/dashboard', 1, 
  (SELECT id FROM modulo WHERE nombre = 'Sistema de Costos' AND padre IS NULL LIMIT 1), 1, NOW(), 'system');

-- 3. SUBMÓDULO PADRE: Configuración
INSERT INTO modulo (nombre, descripcion, icono, tipo_componente, path, orden, padre, status_id, create_at, create_by) 
VALUES ('Configuración', 'Configuración del sistema de costos', 'settings', 'Menu', NULL, 2, 
  (SELECT id FROM modulo WHERE nombre = 'Sistema de Costos' AND padre IS NULL LIMIT 1), 1, NOW(), 'system');

-- 4. HIJO DE CONFIGURACIÓN: Institución
INSERT INTO modulo (nombre, descripcion, icono, tipo_componente, path, orden, padre, status_id, create_at, create_by) 
VALUES ('Institución', 'Datos de la institución', 'building', 'Menu', '/costos/configuracion', 1, 
  (SELECT id FROM modulo WHERE nombre = 'Configuración' AND descripcion = 'Configuración del sistema de costos' LIMIT 1), 1, NOW(), 'system');

-- 5. HIJO DE CONFIGURACIÓN: Estructura Organizacional
INSERT INTO modulo (nombre, descripcion, icono, tipo_componente, path, orden, padre, status_id, create_at, create_by) 
VALUES ('Estructura Organizacional', 'Sedes, Facultades y Programas', 'sitemap', 'Menu', '/costos/estructura', 2, 
  (SELECT id FROM modulo WHERE nombre = 'Configuración' AND descripcion = 'Configuración del sistema de costos' LIMIT 1), 1, NOW(), 'system');

-- 6. HIJO DE CONFIGURACIÓN: Períodos
INSERT INTO modulo (nombre, descripcion, icono, tipo_componente, path, orden, padre, status_id, create_at, create_by) 
VALUES ('Períodos de Costos', 'Gestión de períodos de análisis', 'calendar', 'Menu', '/costos/periodos', 3, 
  (SELECT id FROM modulo WHERE nombre = 'Configuración' AND descripcion = 'Configuración del sistema de costos' LIMIT 1), 1, NOW(), 'system');

-- 7. SUBMÓDULO PADRE: Costeo ABC
INSERT INTO modulo (nombre, descripcion, icono, tipo_componente, path, orden, padre, status_id, create_at, create_by) 
VALUES ('Costeo ABC', 'Activity-Based Costing', 'layers', 'Menu', NULL, 3, 
  (SELECT id FROM modulo WHERE nombre = 'Sistema de Costos' AND padre IS NULL LIMIT 1), 1, NOW(), 'system');

-- 8. HIJO DE COSTEO ABC: Centros de Costo
INSERT INTO modulo (nombre, descripcion, icono, tipo_componente, path, orden, padre, status_id, create_at, create_by) 
VALUES ('Centros de Costo', 'Gestión de centros de costo', 'box', 'Menu', '/costos/abc/centros-costo', 1, 
  (SELECT id FROM modulo WHERE nombre = 'Costeo ABC' LIMIT 1), 1, NOW(), 'system');

-- 9. HIJO DE COSTEO ABC: Actividades
INSERT INTO modulo (nombre, descripcion, icono, tipo_componente, path, orden, padre, status_id, create_at, create_by) 
VALUES ('Actividades', 'Catálogo de actividades', 'zap', 'Menu', '/costos/abc/actividades', 2, 
  (SELECT id FROM modulo WHERE nombre = 'Costeo ABC' LIMIT 1), 1, NOW(), 'system');

-- 10. HIJO DE COSTEO ABC: Inductores
INSERT INTO modulo (nombre, descripcion, icono, tipo_componente, path, orden, padre, status_id, create_at, create_by) 
VALUES ('Inductores de Costo', 'Bases de distribución de costos', 'bar-chart', 'Menu', '/costos/abc/inductores', 3, 
  (SELECT id FROM modulo WHERE nombre = 'Costeo ABC' LIMIT 1), 1, NOW(), 'system');

-- 11. HIJO DE COSTEO ABC: Objetos de Costo
INSERT INTO modulo (nombre, descripcion, icono, tipo_componente, path, orden, padre, status_id, create_at, create_by) 
VALUES ('Objetos de Costo', 'Programas, cursos y proyectos', 'target', 'Menu', '/costos/abc/objetos-costo', 4, 
  (SELECT id FROM modulo WHERE nombre = 'Costeo ABC' LIMIT 1), 1, NOW(), 'system');

-- 12. SUBMÓDULO PADRE: Presupuesto
INSERT INTO modulo (nombre, descripcion, icono, tipo_componente, path, orden, padre, status_id, create_at, create_by) 
VALUES ('Presupuesto', 'Gestión presupuestaria', 'pie-chart', 'Menu', NULL, 4, 
  (SELECT id FROM modulo WHERE nombre = 'Sistema de Costos' AND padre IS NULL LIMIT 1), 1, NOW(), 'system');

-- 13. HIJO DE PRESUPUESTO: Partidas
INSERT INTO modulo (nombre, descripcion, icono, tipo_componente, path, orden, padre, status_id, create_at, create_by) 
VALUES ('Partidas Presupuestarias', 'Estructura de partidas', 'list', 'Menu', '/costos/presupuesto/partidas', 1, 
  (SELECT id FROM modulo WHERE nombre = 'Presupuesto' AND descripcion = 'Gestión presupuestaria' LIMIT 1), 1, NOW(), 'system');

-- 14. HIJO DE PRESUPUESTO: Fuentes de Ingreso
INSERT INTO modulo (nombre, descripcion, icono, tipo_componente, path, orden, padre, status_id, create_at, create_by) 
VALUES ('Fuentes de Ingreso', 'Catálogo de ingresos', 'dollar-sign', 'Menu', '/costos/presupuesto/fuentes-ingreso', 2, 
  (SELECT id FROM modulo WHERE nombre = 'Presupuesto' AND descripcion = 'Gestión presupuestaria' LIMIT 1), 1, NOW(), 'system');

-- 15. SUBMÓDULO PADRE: Ejecución
INSERT INTO modulo (nombre, descripcion, icono, tipo_componente, path, orden, padre, status_id, create_at, create_by) 
VALUES ('Ejecución', 'Registro de ejecución presupuestaria', 'activity', 'Menu', NULL, 5, 
  (SELECT id FROM modulo WHERE nombre = 'Sistema de Costos' AND padre IS NULL LIMIT 1), 1, NOW(), 'system');

-- 16. HIJO DE EJECUCIÓN: Gastos
INSERT INTO modulo (nombre, descripcion, icono, tipo_componente, path, orden, padre, status_id, create_at, create_by) 
VALUES ('Registro de Gastos', 'Gastos ejecutados', 'trending-down', 'Menu', '/costos/ejecucion/gastos', 1, 
  (SELECT id FROM modulo WHERE nombre = 'Ejecución' LIMIT 1), 1, NOW(), 'system');

-- 17. HIJO DE EJECUCIÓN: Ingresos
INSERT INTO modulo (nombre, descripcion, icono, tipo_componente, path, orden, padre, status_id, create_at, create_by) 
VALUES ('Registro de Ingresos', 'Ingresos recibidos', 'trending-up', 'Menu', '/costos/ejecucion/ingresos', 2, 
  (SELECT id FROM modulo WHERE nombre = 'Ejecución' LIMIT 1), 1, NOW(), 'system');

-- 18. SUBMÓDULO: Reportes
INSERT INTO modulo (nombre, descripcion, icono, tipo_componente, path, orden, padre, status_id, create_at, create_by) 
VALUES ('Reportes', 'Reportes y análisis de costos', 'file-text', 'Menu', '/costos/reportes', 6, 
  (SELECT id FROM modulo WHERE nombre = 'Sistema de Costos' AND padre IS NULL LIMIT 1), 1, NOW(), 'system');

-- ============================================
-- VERIFICAR INSERCIÓN
-- ============================================
SELECT 
    m1.id as menu_id,
    m1.nombre as menu_nombre,
    m1.path,
    m2.nombre as menu_padre
FROM modulo m1
LEFT JOIN modulo m2 ON m1.padre = m2.id
WHERE m1.nombre LIKE '%Costos%' OR m2.nombre LIKE '%Costos%'
ORDER BY m1.orden;

-- ============================================
-- ASIGNAR PERMISOS A UN ROL ESPECÍFICO
-- ============================================
-- Reemplaza 'ROLE_ADMINISTRADOR' con tu rol
-- Reemplaza status_id con el ID de status activo

INSERT INTO modulo_rol (modulo_id, rol_id, autorizacion, status_id, create_at, create_by)
SELECT 
    m.id,
    (SELECT id FROM rol WHERE descripcion = 'ROLE_ADMINISTRADOR' LIMIT 1),
    '["Consultar","Incluir","Modificar","Eliminar"]',
    1,
    NOW(),
    'system'
FROM modulo m
WHERE m.nombre IN (
    'Sistema de Costos',
    'Dashboard',
    'Configuración',
    'Institución',
    'Estructura Organizacional',
    'Períodos de Costos',
    'Costeo ABC',
    'Centros de Costo',
    'Actividades',
    'Inductores de Costo',
    'Objetos de Costo',
    'Presupuesto',
    'Partidas Presupuestarias',
    'Fuentes de Ingreso',
    'Ejecución',
    'Registro de Gastos',
    'Registro de Ingresos',
    'Reportes'
);


