-- =============================================================================
-- XPERT SAP B1 - Migracion 033
-- Zonificacion por categoria (slotting): reglas categoria->zona como
-- sugerencia blanda en el putaway, y bins exclusivos por categoria como
-- restriccion dura. Patron relevado de WMS/Comfar (family_zone_rules +
-- bin_group_rules.is_exclusive), adaptado a la categoria unica ya existente
-- en XPERT_SAPB1 (item_categories) en vez de los dos niveles legacy de SAP
-- (item_group/u_subgrupo) que usa WMS.
--
-- De paso corrige `warehouse_zones.storage_mode`: PutawayService ya lo lee
-- y ZoneController/el frontend ya lo escriben, pero ninguna migracion lo
-- creaba -- mismo tipo de gap que 016/030/031/032. Sin esta columna hoy
-- NINGUNA zona es tratada como CHAOTIC (el putaway automatico esta
-- silenciosamente roto, todo cae a eleccion libre del operador).
-- =============================================================================

ALTER TABLE `warehouse_zones`
    ADD COLUMN `storage_mode` ENUM('CHAOTIC','DIRECTED') NOT NULL DEFAULT 'CHAOTIC' AFTER `zone_type`;

ALTER TABLE `item_categories`
    ADD COLUMN `sap_group_code` VARCHAR(20) NULL COMMENT 'ItemsGroupCode de SAP B1 - la categoria se sincroniza sola desde ahi' AFTER `code`,
    ADD UNIQUE KEY `uq_itemcategories_company_sapgroup` (`company_id`, `sap_group_code`);

CREATE TABLE IF NOT EXISTS `zone_category_rules` (
    `id`            INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    `category_id`   INT UNSIGNED NOT NULL,
    `zone_id`       INT UNSIGNED NOT NULL,
    `priority`      TINYINT UNSIGNED NOT NULL DEFAULT 5 COMMENT 'Menor numero = mas preferida, mismo criterio que warehouse_zones.putaway_priority',
    `notes`         VARCHAR(255) NULL,
    `is_active`     TINYINT(1)   NOT NULL DEFAULT 1,
    `created_by`    INT UNSIGNED NULL,
    `created_at`    DATETIME     NOT NULL DEFAULT CURRENT_TIMESTAMP,
    `updated_at`    DATETIME     NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    UNIQUE KEY `uq_zonecategoryrules_cat_zone` (`category_id`, `zone_id`),
    KEY `idx_zonecategoryrules_zone` (`zone_id`),
    CONSTRAINT `fk_zonecategoryrules_category` FOREIGN KEY (`category_id`) REFERENCES `item_categories`(`id`),
    CONSTRAINT `fk_zonecategoryrules_zone` FOREIGN KEY (`zone_id`) REFERENCES `warehouse_zones`(`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
COMMENT='Sugerencia blanda: una categoria puede tener varias zonas candidatas, ordenadas por prioridad. El almacen queda implicito via zone_id.';

ALTER TABLE `bins`
    ADD COLUMN `is_category_exclusive` TINYINT(1) NOT NULL DEFAULT 0 COMMENT 'Si esta activo, el putaway RECHAZA cualquier item de otra categoria en este bin (restriccion dura, no solo sugerencia)' AFTER `category_id`;

ALTER TABLE `sap_sync_log`
    MODIFY COLUMN `sync_type` ENUM('MASTER_ITEMS','MASTER_WAREHOUSES','MASTER_BP','MASTER_CATEGORIES','DOC_INBOUND','DOC_OUTBOUND') NOT NULL;
