-- =====================================================
-- SQL CORREGIDO - MÓDULOS Y PERMISOS
-- Los códigos usan GUIÓN BAJO (ej: USUARIOS_VER)
-- =====================================================

-- 1. LIMPIAR TABLAS
TRUNCATE TABLE roles_permisos;
DELETE FROM permisos;
DELETE FROM modulos;

-- =====================================================
-- 2. INSERTAR MÓDULOS
-- =====================================================
INSERT INTO modulos (codigo, nombre, descripcion, icono, orden, estado) VALUES
('DASHBOARD', 'Dashboard', 'Panel principal del sistema', 'bi-speedometer2', 1, 1),
('PRODUCTOS', 'Productos', 'Gestión de productos', 'bi-box-seam', 10, 1),
('VENTAS', 'Ventas', 'Módulo de ventas y POS', 'bi-cart-check', 20, 1),
('COMPRAS', 'Compras', 'Módulo de compras e ingresos', 'bi-cart-plus', 30, 1),
('INVENTARIO', 'Inventario', 'Gestión de inventario y kardex', 'bi-clipboard-data', 40, 1),
('CLIENTES', 'Clientes', 'Gestión de clientes', 'bi-people', 50, 1),
('PROVEEDORES', 'Proveedores', 'Gestión de proveedores', 'bi-truck', 60, 1),
('CAJA', 'Caja', 'Gestión de caja', 'bi-cash-stack', 70, 1),
('REPORTES', 'Reportes', 'Reportes del sistema', 'bi-graph-up', 80, 1),
('CATEGORIAS', 'Categorías', 'Gestión de categorías', 'bi-tags', 100, 1),
('MARCAS', 'Marcas', 'Gestión de marcas', 'bi-award', 101, 1),
('UNIDADES', 'Unidades de Medida', 'Gestión de unidades', 'bi-rulers', 102, 1),
('ALMACENES', 'Almacenes', 'Gestión de almacenes', 'bi-building', 103, 1),
('USUARIOS', 'Usuarios', 'Gestión de usuarios', 'bi-person-badge', 200, 1),
('ROLES', 'Roles', 'Gestión de roles', 'bi-shield-lock', 201, 1),
('MODULOS', 'Módulos', 'Gestión de módulos del sistema', 'bi-grid', 202, 1),
('PERMISOS', 'Permisos', 'Gestión de permisos', 'bi-key', 203, 1),
('EMPRESA', 'Empresa', 'Configuración de empresa', 'bi-gear', 210, 1),
('TRANSFERENCIAS', 'Transferencias', 'Transferencias entre almacenes', 'bi-arrow-left-right', 45, 1),
('INVENTARIO_FISICO', 'Inventario Físico', 'Conteo de inventario físico', 'bi-clipboard-check', 46, 1);

-- =====================================================
-- 3. INSERTAR PERMISOS (con GUIÓN BAJO)
-- =====================================================

-- Dashboard
INSERT INTO permisos (id_modulo, codigo, nombre, tipo_permiso, estado) VALUES
((SELECT id_modulo FROM modulos WHERE codigo = 'DASHBOARD'), 'DASHBOARD_VER', 'Ver Dashboard', 'LEER', 1);

-- Productos
INSERT INTO permisos (id_modulo, codigo, nombre, tipo_permiso, estado) VALUES
((SELECT id_modulo FROM modulos WHERE codigo = 'PRODUCTOS'), 'PRODUCTOS_VER', 'Ver Productos', 'LEER', 1),
((SELECT id_modulo FROM modulos WHERE codigo = 'PRODUCTOS'), 'PRODUCTOS_CREAR', 'Crear Productos', 'CREAR', 1),
((SELECT id_modulo FROM modulos WHERE codigo = 'PRODUCTOS'), 'PRODUCTOS_EDITAR', 'Editar Productos', 'EDITAR', 1),
((SELECT id_modulo FROM modulos WHERE codigo = 'PRODUCTOS'), 'PRODUCTOS_ELIMINAR', 'Eliminar Productos', 'ELIMINAR', 1),
((SELECT id_modulo FROM modulos WHERE codigo = 'PRODUCTOS'), 'PRODUCTOS_EXPORTAR', 'Exportar Productos', 'EXPORTAR', 1);

-- Ventas
INSERT INTO permisos (id_modulo, codigo, nombre, tipo_permiso, estado) VALUES
((SELECT id_modulo FROM modulos WHERE codigo = 'VENTAS'), 'VENTAS_VER', 'Ver Ventas', 'LEER', 1),
((SELECT id_modulo FROM modulos WHERE codigo = 'VENTAS'), 'VENTAS_CREAR', 'Crear Ventas', 'CREAR', 1),
((SELECT id_modulo FROM modulos WHERE codigo = 'VENTAS'), 'VENTAS_ANULAR', 'Anular Ventas', 'ANULAR', 1),
((SELECT id_modulo FROM modulos WHERE codigo = 'VENTAS'), 'VENTAS_IMPRIMIR', 'Imprimir Ventas', 'IMPRIMIR', 1),
((SELECT id_modulo FROM modulos WHERE codigo = 'VENTAS'), 'VENTAS_EXPORTAR', 'Exportar Ventas', 'EXPORTAR', 1);

-- Compras/Ingresos
INSERT INTO permisos (id_modulo, codigo, nombre, tipo_permiso, estado) VALUES
((SELECT id_modulo FROM modulos WHERE codigo = 'COMPRAS'), 'COMPRAS_VER', 'Ver Compras/Ingresos', 'LEER', 1),
((SELECT id_modulo FROM modulos WHERE codigo = 'COMPRAS'), 'COMPRAS_CREAR', 'Crear Compras/Ingresos', 'CREAR', 1),
((SELECT id_modulo FROM modulos WHERE codigo = 'COMPRAS'), 'COMPRAS_EDITAR', 'Editar Compras', 'EDITAR', 1),
((SELECT id_modulo FROM modulos WHERE codigo = 'COMPRAS'), 'COMPRAS_ELIMINAR', 'Eliminar Compras', 'ELIMINAR', 1);

-- Inventario/Kardex
INSERT INTO permisos (id_modulo, codigo, nombre, tipo_permiso, estado) VALUES
((SELECT id_modulo FROM modulos WHERE codigo = 'INVENTARIO'), 'INVENTARIO_VER', 'Ver Kardex', 'LEER', 1),
((SELECT id_modulo FROM modulos WHERE codigo = 'INVENTARIO'), 'INVENTARIO_CREAR', 'Realizar Ajustes', 'CREAR', 1),
((SELECT id_modulo FROM modulos WHERE codigo = 'INVENTARIO'), 'INVENTARIO_EXPORTAR', 'Exportar Kardex', 'EXPORTAR', 1);

-- Clientes
INSERT INTO permisos (id_modulo, codigo, nombre, tipo_permiso, estado) VALUES
((SELECT id_modulo FROM modulos WHERE codigo = 'CLIENTES'), 'CLIENTES_VER', 'Ver Clientes', 'LEER', 1),
((SELECT id_modulo FROM modulos WHERE codigo = 'CLIENTES'), 'CLIENTES_CREAR', 'Crear Clientes', 'CREAR', 1),
((SELECT id_modulo FROM modulos WHERE codigo = 'CLIENTES'), 'CLIENTES_EDITAR', 'Editar Clientes', 'EDITAR', 1),
((SELECT id_modulo FROM modulos WHERE codigo = 'CLIENTES'), 'CLIENTES_ELIMINAR', 'Eliminar Clientes', 'ELIMINAR', 1);

-- Proveedores
INSERT INTO permisos (id_modulo, codigo, nombre, tipo_permiso, estado) VALUES
((SELECT id_modulo FROM modulos WHERE codigo = 'PROVEEDORES'), 'PROVEEDORES_VER', 'Ver Proveedores', 'LEER', 1),
((SELECT id_modulo FROM modulos WHERE codigo = 'PROVEEDORES'), 'PROVEEDORES_CREAR', 'Crear Proveedores', 'CREAR', 1),
((SELECT id_modulo FROM modulos WHERE codigo = 'PROVEEDORES'), 'PROVEEDORES_EDITAR', 'Editar Proveedores', 'EDITAR', 1),
((SELECT id_modulo FROM modulos WHERE codigo = 'PROVEEDORES'), 'PROVEEDORES_ELIMINAR', 'Eliminar Proveedores', 'ELIMINAR', 1);

-- Caja
INSERT INTO permisos (id_modulo, codigo, nombre, tipo_permiso, estado) VALUES
((SELECT id_modulo FROM modulos WHERE codigo = 'CAJA'), 'CAJA_VER', 'Ver Cajas', 'LEER', 1),
((SELECT id_modulo FROM modulos WHERE codigo = 'CAJA'), 'CAJA_CREAR', 'Abrir Caja', 'CREAR', 1),
((SELECT id_modulo FROM modulos WHERE codigo = 'CAJA'), 'CAJA_EDITAR', 'Cerrar Caja', 'EDITAR', 1),
((SELECT id_modulo FROM modulos WHERE codigo = 'CAJA'), 'CAJA_ARQUEO', 'Realizar Arqueo', 'ESPECIAL', 1);

-- Reportes
INSERT INTO permisos (id_modulo, codigo, nombre, tipo_permiso, estado) VALUES
((SELECT id_modulo FROM modulos WHERE codigo = 'REPORTES'), 'REPORTES_VER', 'Ver Reportes', 'LEER', 1),
((SELECT id_modulo FROM modulos WHERE codigo = 'REPORTES'), 'REPORTES_EXPORTAR', 'Exportar Reportes', 'EXPORTAR', 1);

-- Categorías
INSERT INTO permisos (id_modulo, codigo, nombre, tipo_permiso, estado) VALUES
((SELECT id_modulo FROM modulos WHERE codigo = 'CATEGORIAS'), 'CATEGORIAS_VER', 'Ver Categorías', 'LEER', 1),
((SELECT id_modulo FROM modulos WHERE codigo = 'CATEGORIAS'), 'CATEGORIAS_CREAR', 'Crear Categorías', 'CREAR', 1),
((SELECT id_modulo FROM modulos WHERE codigo = 'CATEGORIAS'), 'CATEGORIAS_EDITAR', 'Editar Categorías', 'EDITAR', 1),
((SELECT id_modulo FROM modulos WHERE codigo = 'CATEGORIAS'), 'CATEGORIAS_ELIMINAR', 'Eliminar Categorías', 'ELIMINAR', 1);

-- Marcas
INSERT INTO permisos (id_modulo, codigo, nombre, tipo_permiso, estado) VALUES
((SELECT id_modulo FROM modulos WHERE codigo = 'MARCAS'), 'MARCAS_VER', 'Ver Marcas', 'LEER', 1),
((SELECT id_modulo FROM modulos WHERE codigo = 'MARCAS'), 'MARCAS_CREAR', 'Crear Marcas', 'CREAR', 1),
((SELECT id_modulo FROM modulos WHERE codigo = 'MARCAS'), 'MARCAS_EDITAR', 'Editar Marcas', 'EDITAR', 1),
((SELECT id_modulo FROM modulos WHERE codigo = 'MARCAS'), 'MARCAS_ELIMINAR', 'Eliminar Marcas', 'ELIMINAR', 1);

-- Unidades
INSERT INTO permisos (id_modulo, codigo, nombre, tipo_permiso, estado) VALUES
((SELECT id_modulo FROM modulos WHERE codigo = 'UNIDADES'), 'UNIDADES_VER', 'Ver Unidades', 'LEER', 1),
((SELECT id_modulo FROM modulos WHERE codigo = 'UNIDADES'), 'UNIDADES_CREAR', 'Crear Unidades', 'CREAR', 1),
((SELECT id_modulo FROM modulos WHERE codigo = 'UNIDADES'), 'UNIDADES_EDITAR', 'Editar Unidades', 'EDITAR', 1),
((SELECT id_modulo FROM modulos WHERE codigo = 'UNIDADES'), 'UNIDADES_ELIMINAR', 'Eliminar Unidades', 'ELIMINAR', 1);

-- Almacenes
INSERT INTO permisos (id_modulo, codigo, nombre, tipo_permiso, estado) VALUES
((SELECT id_modulo FROM modulos WHERE codigo = 'ALMACENES'), 'ALMACENES_VER', 'Ver Almacenes', 'LEER', 1),
((SELECT id_modulo FROM modulos WHERE codigo = 'ALMACENES'), 'ALMACENES_CREAR', 'Crear Almacenes', 'CREAR', 1),
((SELECT id_modulo FROM modulos WHERE codigo = 'ALMACENES'), 'ALMACENES_EDITAR', 'Editar Almacenes', 'EDITAR', 1),
((SELECT id_modulo FROM modulos WHERE codigo = 'ALMACENES'), 'ALMACENES_ELIMINAR', 'Eliminar Almacenes', 'ELIMINAR', 1);

-- Usuarios
INSERT INTO permisos (id_modulo, codigo, nombre, tipo_permiso, estado) VALUES
((SELECT id_modulo FROM modulos WHERE codigo = 'USUARIOS'), 'USUARIOS_VER', 'Ver Usuarios', 'LEER', 1),
((SELECT id_modulo FROM modulos WHERE codigo = 'USUARIOS'), 'USUARIOS_CREAR', 'Crear Usuarios', 'CREAR', 1),
((SELECT id_modulo FROM modulos WHERE codigo = 'USUARIOS'), 'USUARIOS_EDITAR', 'Editar Usuarios', 'EDITAR', 1),
((SELECT id_modulo FROM modulos WHERE codigo = 'USUARIOS'), 'USUARIOS_ELIMINAR', 'Eliminar Usuarios', 'ELIMINAR', 1),
((SELECT id_modulo FROM modulos WHERE codigo = 'USUARIOS'), 'USUARIOS_RESET_PASSWORD', 'Restablecer Contraseña', 'ESPECIAL', 1);

-- Roles
INSERT INTO permisos (id_modulo, codigo, nombre, tipo_permiso, estado) VALUES
((SELECT id_modulo FROM modulos WHERE codigo = 'ROLES'), 'ROLES_VER', 'Ver Roles', 'LEER', 1),
((SELECT id_modulo FROM modulos WHERE codigo = 'ROLES'), 'ROLES_CREAR', 'Crear Roles', 'CREAR', 1),
((SELECT id_modulo FROM modulos WHERE codigo = 'ROLES'), 'ROLES_EDITAR', 'Editar Roles', 'EDITAR', 1),
((SELECT id_modulo FROM modulos WHERE codigo = 'ROLES'), 'ROLES_ELIMINAR', 'Eliminar Roles', 'ELIMINAR', 1),
((SELECT id_modulo FROM modulos WHERE codigo = 'ROLES'), 'ROLES_PERMISOS', 'Asignar Permisos', 'ESPECIAL', 1);

-- Módulos
INSERT INTO permisos (id_modulo, codigo, nombre, tipo_permiso, estado) VALUES
((SELECT id_modulo FROM modulos WHERE codigo = 'MODULOS'), 'MODULOS_VER', 'Ver Módulos', 'LEER', 1),
((SELECT id_modulo FROM modulos WHERE codigo = 'MODULOS'), 'MODULOS_CREAR', 'Crear Módulos', 'CREAR', 1),
((SELECT id_modulo FROM modulos WHERE codigo = 'MODULOS'), 'MODULOS_EDITAR', 'Editar Módulos', 'EDITAR', 1),
((SELECT id_modulo FROM modulos WHERE codigo = 'MODULOS'), 'MODULOS_ELIMINAR', 'Eliminar Módulos', 'ELIMINAR', 1);

-- Permisos
INSERT INTO permisos (id_modulo, codigo, nombre, tipo_permiso, estado) VALUES
((SELECT id_modulo FROM modulos WHERE codigo = 'PERMISOS'), 'PERMISOS_VER', 'Ver Permisos', 'LEER', 1),
((SELECT id_modulo FROM modulos WHERE codigo = 'PERMISOS'), 'PERMISOS_CREAR', 'Crear Permisos', 'CREAR', 1),
((SELECT id_modulo FROM modulos WHERE codigo = 'PERMISOS'), 'PERMISOS_EDITAR', 'Editar Permisos', 'EDITAR', 1),
((SELECT id_modulo FROM modulos WHERE codigo = 'PERMISOS'), 'PERMISOS_ELIMINAR', 'Eliminar Permisos', 'ELIMINAR', 1);

-- Empresa
INSERT INTO permisos (id_modulo, codigo, nombre, tipo_permiso, estado) VALUES
((SELECT id_modulo FROM modulos WHERE codigo = 'EMPRESA'), 'EMPRESA_VER', 'Ver Configuración Empresa', 'LEER', 1),
((SELECT id_modulo FROM modulos WHERE codigo = 'EMPRESA'), 'EMPRESA_EDITAR', 'Editar Configuración Empresa', 'EDITAR', 1);

-- Transferencias
INSERT INTO permisos (id_modulo, codigo, nombre, tipo_permiso, estado) VALUES
((SELECT id_modulo FROM modulos WHERE codigo = 'TRANSFERENCIAS'), 'TRANSFERENCIAS_VER', 'Ver Transferencias', 'LEER', 1),
((SELECT id_modulo FROM modulos WHERE codigo = 'TRANSFERENCIAS'), 'TRANSFERENCIAS_CREAR', 'Crear Transferencias', 'CREAR', 1),
((SELECT id_modulo FROM modulos WHERE codigo = 'TRANSFERENCIAS'), 'TRANSFERENCIAS_APROBAR', 'Aprobar Transferencias', 'APROBAR', 1);

-- Inventario Físico
INSERT INTO permisos (id_modulo, codigo, nombre, tipo_permiso, estado) VALUES
((SELECT id_modulo FROM modulos WHERE codigo = 'INVENTARIO_FISICO'), 'INVENTARIO_FISICO_VER', 'Ver Inventarios Físicos', 'LEER', 1),
((SELECT id_modulo FROM modulos WHERE codigo = 'INVENTARIO_FISICO'), 'INVENTARIO_FISICO_CREAR', 'Crear Inventario Físico', 'CREAR', 1),
((SELECT id_modulo FROM modulos WHERE codigo = 'INVENTARIO_FISICO'), 'INVENTARIO_FISICO_APLICAR', 'Aplicar Ajustes', 'APROBAR', 1);

-- =====================================================
-- 4. ASIGNAR TODOS LOS PERMISOS AL ROL ADMINISTRADOR
-- =====================================================

-- Buscar el rol administrador (puede tener diferentes nombres)
SET @id_rol_admin = (
    SELECT id_rol FROM roles 
    WHERE codigo IN ('ADMIN', 'ADMINISTRADOR') 
       OR nombre LIKE '%Admin%' 
    ORDER BY nivel_acceso DESC 
    LIMIT 1
);

-- Si no encuentra, usar el primer rol con mayor nivel
SET @id_rol_admin = COALESCE(@id_rol_admin, (SELECT id_rol FROM roles ORDER BY nivel_acceso DESC LIMIT 1));

-- Mostrar qué rol se usará
SELECT @id_rol_admin AS id_rol_admin, 
       (SELECT nombre FROM roles WHERE id_rol = @id_rol_admin) AS nombre_rol;

-- Asignar TODOS los permisos al rol admin
INSERT INTO roles_permisos (id_rol, id_permiso)
SELECT @id_rol_admin, id_permiso
FROM permisos
WHERE estado = 1
ON DUPLICATE KEY UPDATE id_rol = id_rol;

-- =====================================================
-- 5. VERIFICAR
-- =====================================================
SELECT 'Módulos creados:' AS info, COUNT(*) AS total FROM modulos WHERE estado = 1;
SELECT 'Permisos creados:' AS info, COUNT(*) AS total FROM permisos WHERE estado = 1;
SELECT 'Permisos asignados al Admin:' AS info, COUNT(*) AS total FROM roles_permisos WHERE id_rol = @id_rol_admin;

-- Ver permisos del rol admin
SELECT p.codigo, p.nombre, m.nombre AS modulo
FROM roles_permisos rp
INNER JOIN permisos p ON rp.id_permiso = p.id_permiso
INNER JOIN modulos m ON p.id_modulo = m.id_modulo
WHERE rp.id_rol = @id_rol_admin
ORDER BY m.orden, p.codigo;
