-- =====================================================
-- DATOS INICIALES - MÓDULOS Y PERMISOS
-- Ejecutar en phpMyAdmin
-- Adaptado a tu estructura existente
-- =====================================================

-- Limpiar tablas (opcional - comentar si ya tienes datos)
-- TRUNCATE TABLE roles_permisos;
-- TRUNCATE TABLE permisos;
-- TRUNCATE TABLE modulos;

-- =====================================================
-- 1. 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)
ON DUPLICATE KEY UPDATE nombre = VALUES(nombre), icono = VALUES(icono);

-- =====================================================
-- 2. INSERTAR PERMISOS PARA CADA MÓDULO
-- =====================================================

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

-- Productos
INSERT INTO permisos (id_modulo, codigo, nombre, tipo_permiso, estado) VALUES
((SELECT id_modulo FROM modulos WHERE codigo = 'PRODUCTOS'), 'PRODUCTOS.LEER', '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)
ON DUPLICATE KEY UPDATE nombre = VALUES(nombre);

-- Ventas
INSERT INTO permisos (id_modulo, codigo, nombre, tipo_permiso, estado) VALUES
((SELECT id_modulo FROM modulos WHERE codigo = 'VENTAS'), 'VENTAS.LEER', '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)
ON DUPLICATE KEY UPDATE nombre = VALUES(nombre);

-- Compras
INSERT INTO permisos (id_modulo, codigo, nombre, tipo_permiso, estado) VALUES
((SELECT id_modulo FROM modulos WHERE codigo = 'COMPRAS'), 'COMPRAS.LEER', '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)
ON DUPLICATE KEY UPDATE nombre = VALUES(nombre);

-- Inventario/Kardex
INSERT INTO permisos (id_modulo, codigo, nombre, tipo_permiso, estado) VALUES
((SELECT id_modulo FROM modulos WHERE codigo = 'INVENTARIO'), 'INVENTARIO.LEER', '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)
ON DUPLICATE KEY UPDATE nombre = VALUES(nombre);

-- Clientes
INSERT INTO permisos (id_modulo, codigo, nombre, tipo_permiso, estado) VALUES
((SELECT id_modulo FROM modulos WHERE codigo = 'CLIENTES'), 'CLIENTES.LEER', '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)
ON DUPLICATE KEY UPDATE nombre = VALUES(nombre);

-- Proveedores
INSERT INTO permisos (id_modulo, codigo, nombre, tipo_permiso, estado) VALUES
((SELECT id_modulo FROM modulos WHERE codigo = 'PROVEEDORES'), 'PROVEEDORES.LEER', '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)
ON DUPLICATE KEY UPDATE nombre = VALUES(nombre);

-- Caja
INSERT INTO permisos (id_modulo, codigo, nombre, tipo_permiso, estado) VALUES
((SELECT id_modulo FROM modulos WHERE codigo = 'CAJA'), 'CAJA.LEER', '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.ESPECIAL', 'Realizar Arqueo', 'ESPECIAL', 1)
ON DUPLICATE KEY UPDATE nombre = VALUES(nombre);

-- Reportes
INSERT INTO permisos (id_modulo, codigo, nombre, tipo_permiso, estado) VALUES
((SELECT id_modulo FROM modulos WHERE codigo = 'REPORTES'), 'REPORTES.LEER', 'Ver Reportes', 'LEER', 1),
((SELECT id_modulo FROM modulos WHERE codigo = 'REPORTES'), 'REPORTES.EXPORTAR', 'Exportar Reportes', 'EXPORTAR', 1)
ON DUPLICATE KEY UPDATE nombre = VALUES(nombre);

-- Categorías
INSERT INTO permisos (id_modulo, codigo, nombre, tipo_permiso, estado) VALUES
((SELECT id_modulo FROM modulos WHERE codigo = 'CATEGORIAS'), 'CATEGORIAS.LEER', '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)
ON DUPLICATE KEY UPDATE nombre = VALUES(nombre);

-- Marcas
INSERT INTO permisos (id_modulo, codigo, nombre, tipo_permiso, estado) VALUES
((SELECT id_modulo FROM modulos WHERE codigo = 'MARCAS'), 'MARCAS.LEER', '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)
ON DUPLICATE KEY UPDATE nombre = VALUES(nombre);

-- Unidades
INSERT INTO permisos (id_modulo, codigo, nombre, tipo_permiso, estado) VALUES
((SELECT id_modulo FROM modulos WHERE codigo = 'UNIDADES'), 'UNIDADES.LEER', '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)
ON DUPLICATE KEY UPDATE nombre = VALUES(nombre);

-- Almacenes
INSERT INTO permisos (id_modulo, codigo, nombre, tipo_permiso, estado) VALUES
((SELECT id_modulo FROM modulos WHERE codigo = 'ALMACENES'), 'ALMACENES.LEER', '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)
ON DUPLICATE KEY UPDATE nombre = VALUES(nombre);

-- Usuarios
INSERT INTO permisos (id_modulo, codigo, nombre, tipo_permiso, estado) VALUES
((SELECT id_modulo FROM modulos WHERE codigo = 'USUARIOS'), 'USUARIOS.LEER', '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.ESPECIAL', 'Restablecer Contraseña', 'ESPECIAL', 1)
ON DUPLICATE KEY UPDATE nombre = VALUES(nombre);

-- Roles
INSERT INTO permisos (id_modulo, codigo, nombre, tipo_permiso, estado) VALUES
((SELECT id_modulo FROM modulos WHERE codigo = 'ROLES'), 'ROLES.LEER', '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.ESPECIAL', 'Asignar Permisos', 'ESPECIAL', 1)
ON DUPLICATE KEY UPDATE nombre = VALUES(nombre);

-- Módulos
INSERT INTO permisos (id_modulo, codigo, nombre, tipo_permiso, estado) VALUES
((SELECT id_modulo FROM modulos WHERE codigo = 'MODULOS'), 'MODULOS.LEER', '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)
ON DUPLICATE KEY UPDATE nombre = VALUES(nombre);

-- Permisos
INSERT INTO permisos (id_modulo, codigo, nombre, tipo_permiso, estado) VALUES
((SELECT id_modulo FROM modulos WHERE codigo = 'PERMISOS'), 'PERMISOS.LEER', '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)
ON DUPLICATE KEY UPDATE nombre = VALUES(nombre);

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

-- Transferencias
INSERT INTO permisos (id_modulo, codigo, nombre, tipo_permiso, estado) VALUES
((SELECT id_modulo FROM modulos WHERE codigo = 'TRANSFERENCIAS'), 'TRANSFERENCIAS.LEER', '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)
ON DUPLICATE KEY UPDATE nombre = VALUES(nombre);

-- 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.LEER', '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.APROBAR', 'Aplicar Ajustes', 'APROBAR', 1)
ON DUPLICATE KEY UPDATE nombre = VALUES(nombre);

-- =====================================================
-- 3. CREAR TABLA roles_permisos SI NO EXISTE
-- =====================================================
CREATE TABLE IF NOT EXISTS roles_permisos (
    id_rol_permiso INT AUTO_INCREMENT PRIMARY KEY,
    id_rol INT NOT NULL,
    id_permiso INT NOT NULL,
    fecha_asignacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (id_rol) REFERENCES roles(id_rol) ON DELETE CASCADE,
    FOREIGN KEY (id_permiso) REFERENCES permisos(id_permiso) ON DELETE CASCADE,
    UNIQUE KEY uk_rol_permiso (id_rol, id_permiso)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- =====================================================
-- 4. ASIGNAR TODOS LOS PERMISOS AL ROL ADMINISTRADOR
-- =====================================================
INSERT INTO roles_permisos (id_rol, id_permiso)
SELECT 
    (SELECT id_rol FROM roles WHERE codigo = 'ADMIN' OR nombre LIKE '%Admin%' LIMIT 1),
    id_permiso
FROM permisos
WHERE estado = 1
ON DUPLICATE KEY UPDATE fecha_asignacion = CURRENT_TIMESTAMP;

-- =====================================================
-- 5. VERIFICAR INSTALACIÓN
-- =====================================================
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:' AS info, COUNT(*) AS total FROM roles_permisos;
