-- =============================================================================
-- XPERT SAP B1 - Migracion 058
-- Fase 1 de "Control de acceso por almacen para operarios": fundacion del
-- modelo de datos, sin cambio de comportamiento visible todavia (el
-- enforcement real llega en fases posteriores via WarehouseAccessMiddleware).
--
-- Auditoria previa confirmo que hoy NO existe ninguna restriccion de acceso
-- por almacen en ningun lado: `users.warehouse_id` es solo un default de UI
-- (se conserva tal cual, no se usa para control de acceso), y
-- AuthMiddleware::warehouseId() es codigo muerto sin ningun llamador.
--
-- `all_warehouses` como booleano (no una fila por almacen actual) evita que
-- un usuario "con todos" pierda acceso silenciosamente el dia que se crea un
-- almacen nuevo. El dia 1 nadie queda bloqueado: se siembra all_warehouses=1
-- para todos los usuarios existentes (hoy nada se restringe de hecho).
--
-- admin es un caso aparte (equivalente a root): su acceso total es por el
-- bypass de rol ya hardcodeado (RoleMiddleware.php, ActionPermissionMiddleware.php,
-- AuthService.php), no participa de este mecanismo.
-- =============================================================================

ALTER TABLE `users`
  ADD COLUMN `all_warehouses` TINYINT(1) NOT NULL DEFAULT 0
    COMMENT 'Si 1: acceso a todos los almacenes actuales y futuros, ignora user_warehouses.'
    AFTER `warehouse_id`;

CREATE TABLE IF NOT EXISTS `user_warehouses` (
  `id`           INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  `user_id`      INT UNSIGNED NOT NULL,
  `warehouse_id` INT UNSIGNED NOT NULL,
  `created_at`   DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `created_by`   INT UNSIGNED NULL,
  UNIQUE KEY `uq_user_warehouse` (`user_id`, `warehouse_id`),
  CONSTRAINT `fk_uw_user` FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON DELETE CASCADE,
  CONSTRAINT `fk_uw_warehouse` FOREIGN KEY (`warehouse_id`) REFERENCES `warehouses`(`id`) ON DELETE CASCADE,
  CONSTRAINT `fk_uw_created_by` FOREIGN KEY (`created_by`) REFERENCES `users`(`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
COMMENT='Asignacion explicita de almacenes por usuario -- ver src/config/warehouse_scope.php';

-- Dia 1: nadie queda bloqueado (hoy nada se restringe de hecho).
UPDATE `users` SET `all_warehouses` = 1;
