-- =============================================================================
-- XPERT SAP B1 - Migracion 045
-- Panel de administracion de roles: accesos de menu + autorizacion de
-- botones/acciones sensibles, hoy inexistente (el nav se muestra completo a
-- cualquier rol, y ~15 endpoints de override -liberar QA, cancelar salida,
-- liberar a picking, forzar cierre, aprobar/rechazar conteo, etc- no tienen
-- ninguna restriccion). Un unico modelo (permission_type MENU|ACTION) sirve
-- para las dos partes, resuelto en runtime contra el registro estatico de
-- claves en src/config/permission_registry.php (fuente de verdad de que
-- claves existen y a que rutas mapea cada accion).
--
-- Solo se siembran las filas de ALLOW (allowed=1): la ausencia de fila para
-- un (rol, tipo, clave) equivale a "no permitido" -- RolePermissionRepository
-- solo selecciona allowed=1, asi que no hace falta poblar explicitamente los
-- "denegados" (serian la mayoria de las combinaciones).
--
-- `admin` nunca tiene filas aca (bypass hardcodeado en el middleware, igual
-- que ya hace RoleMiddleware). `kiosk` tampoco (no es fila de `roles`, sigue
-- gobernado 100% por role_policy.php sin tocar).
-- =============================================================================

CREATE TABLE IF NOT EXISTS `role_permissions` (
    `id`              INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    `role_code`       VARCHAR(30) NOT NULL,
    `permission_type` ENUM('MENU','ACTION') NOT NULL,
    `permission_key`  VARCHAR(60) NOT NULL,
    `allowed`         TINYINT(1) NOT NULL DEFAULT 0,
    `updated_at`      DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    `updated_by`      INT UNSIGNED NULL,
    UNIQUE KEY `uq_role_permission` (`role_code`, `permission_type`, `permission_key`),
    CONSTRAINT `fk_role_permissions_role` FOREIGN KEY (`role_code`) REFERENCES `roles`(`code`),
    CONSTRAINT `fk_role_permissions_user` FOREIGN KEY (`updated_by`) REFERENCES `users`(`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
COMMENT='Accesos de menu y autorizacion de acciones por rol -- ver src/config/permission_registry.php';

-- -----------------------------------------------------------------------------
-- MENU -- cada operador arranca viendo solo su sector (+ Dashboard, que
-- siempre es visible para todos y no vive en esta tabla). supervisor ve todo
-- lo operativo mas un subconjunto de Parametros (no usuarios/roles/SAP/backup,
-- eso queda admin-only).
-- -----------------------------------------------------------------------------

INSERT INTO `role_permissions` (`role_code`, `permission_type`, `permission_key`, `allowed`) VALUES
('supervisor', 'MENU', 'inbound', 1),
('supervisor', 'MENU', 'classification', 1),
('supervisor', 'MENU', 'stock', 1),
('supervisor', 'MENU', 'lpn-tracking', 1),
('supervisor', 'MENU', 'outbound', 1),
('supervisor', 'MENU', 'packing', 1),
('supervisor', 'MENU', 'dispatch', 1),
('supervisor', 'MENU', 'outbound-transfer', 1),
('supervisor', 'MENU', 'tasks', 1),
('supervisor', 'MENU', 'task-monitor', 1),
('supervisor', 'MENU', 'doc-tracking', 1),
('supervisor', 'MENU', 'warehouse-map', 1),
('supervisor', 'MENU', 'batches', 1),
('supervisor', 'MENU', 'stock-counts', 1),
('supervisor', 'MENU', 'inventory-reconciliation', 1),
('supervisor', 'MENU', 'traceability', 1),
('supervisor', 'MENU', 'recalls', 1),
('supervisor', 'MENU', 'reports-productivity', 1),
('supervisor', 'MENU', 'reports-service-level', 1),
('supervisor', 'MENU', 'reports-expiry', 1),
('supervisor', 'MENU', 'indicators-receiving', 1),
('supervisor', 'MENU', 'indicators-storage', 1),
('supervisor', 'MENU', 'indicators-outbound', 1),
('supervisor', 'MENU', 'indicators-productivity', 1),
('supervisor', 'MENU', 'warehouses', 1),
('supervisor', 'MENU', 'bins', 1),
('supervisor', 'MENU', 'vehicles', 1),
('supervisor', 'MENU', 'drivers', 1),
('supervisor', 'MENU', 'audit-log', 1),
('supervisor', 'MENU', 'tv-wall-admin', 1),

('op_recepcion', 'MENU', 'inbound', 1),
('op_recepcion', 'MENU', 'classification', 1),
('op_recepcion', 'MENU', 'stock', 1),
('op_recepcion', 'MENU', 'doc-tracking', 1),
('op_recepcion', 'MENU', 'indicators-receiving', 1),

('op_almacen', 'MENU', 'classification', 1),
('op_almacen', 'MENU', 'stock', 1),
('op_almacen', 'MENU', 'lpn-tracking', 1),
('op_almacen', 'MENU', 'tasks', 1),
('op_almacen', 'MENU', 'task-monitor', 1),
('op_almacen', 'MENU', 'warehouse-map', 1),
('op_almacen', 'MENU', 'doc-tracking', 1),
('op_almacen', 'MENU', 'indicators-storage', 1),

('op_picking', 'MENU', 'outbound', 1),
('op_picking', 'MENU', 'tasks', 1),
('op_picking', 'MENU', 'task-monitor', 1),
('op_picking', 'MENU', 'indicators-outbound', 1),

('op_packing', 'MENU', 'packing', 1),
('op_packing', 'MENU', 'tasks', 1),
('op_packing', 'MENU', 'task-monitor', 1),

('op_despacho', 'MENU', 'dispatch', 1),
('op_despacho', 'MENU', 'outbound-transfer', 1),
('op_despacho', 'MENU', 'doc-tracking', 1),
('op_despacho', 'MENU', 'indicators-outbound', 1),

('viewer', 'MENU', 'reports-productivity', 1),
('viewer', 'MENU', 'reports-service-level', 1),
('viewer', 'MENU', 'reports-expiry', 1),
('viewer', 'MENU', 'indicators-receiving', 1),
('viewer', 'MENU', 'indicators-storage', 1),
('viewer', 'MENU', 'indicators-outbound', 1),
('viewer', 'MENU', 'indicators-productivity', 1);

-- -----------------------------------------------------------------------------
-- ACTION -- las de override/excepcion arrancan solo para supervisor; se
-- suman 3 excepciones puntuales a roles operativos que ya hacen esa accion
-- como parte normal de su trabajo (despachar, liberar lo que clasificaron,
-- cancelar lo que ellos mismos recibieron). admin.manage_users/manage_roles
-- y las importaciones SAP quedan sin ninguna fila (nadie salvo el bypass de
-- admin).
-- -----------------------------------------------------------------------------

INSERT INTO `role_permissions` (`role_code`, `permission_type`, `permission_key`, `allowed`) VALUES
('supervisor', 'ACTION', 'inbound.cancel_document', 1),
('supervisor', 'ACTION', 'inbound.force_close', 1),
('supervisor', 'ACTION', 'stock.release_qa', 1),
('supervisor', 'ACTION', 'lpn.remove_stock', 1),
('supervisor', 'ACTION', 'outbound.release_to_picking', 1),
('supervisor', 'ACTION', 'outbound.cancel', 1),
('supervisor', 'ACTION', 'outbound.cancel_remaining_lines', 1),
('supervisor', 'ACTION', 'dispatch.cancel_trip', 1),
('supervisor', 'ACTION', 'dispatch.remove_document', 1),
('supervisor', 'ACTION', 'dispatch.depart', 1),
('supervisor', 'ACTION', 'stock_count.approve', 1),
('supervisor', 'ACTION', 'stock_count.reject', 1),

('op_despacho', 'ACTION', 'dispatch.depart', 1),
('op_almacen', 'ACTION', 'outbound.release_to_picking', 1),
('op_recepcion', 'ACTION', 'inbound.cancel_document', 1);
