-- =============================================================================
-- XPERT 3PL - Migracion 023
-- Categorias de producto (catalogo controlado, por empresa) para poder
-- zonificar el sector de Picking por tipo de mercaderia en vez de dejarlo
-- caotico. Arranca plana (parent_category_id sin uso todavia, listo para
-- el dia que haga falta jerarquia real). items.category (texto libre) se
-- reemplaza por items.category_id via script de datos aparte, una vez
-- revisado el mapeo con el usuario.
-- =============================================================================

CREATE TABLE IF NOT EXISTS `item_categories` (
    `id`                  INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    `company_id`          INT UNSIGNED NOT NULL,
    `code`                VARCHAR(50)  NOT NULL,
    `name`                VARCHAR(150) NOT NULL,
    `parent_category_id`  INT UNSIGNED NULL COMMENT 'Sin uso todavia - preparado para jerarquia futura',
    `is_active`           TINYINT(1)   NOT NULL DEFAULT 1,
    `created_at`          DATETIME     NOT NULL DEFAULT CURRENT_TIMESTAMP,
    `updated_at`          DATETIME     NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    UNIQUE KEY `uq_itemcategories_company_code` (`company_id`, `code`),
    KEY `idx_itemcategories_parent` (`parent_category_id`),
    CONSTRAINT `fk_itemcategories_company` FOREIGN KEY (`company_id`) REFERENCES `companies`(`id`),
    CONSTRAINT `fk_itemcategories_parent` FOREIGN KEY (`parent_category_id`) REFERENCES `item_categories`(`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

ALTER TABLE `items`
    ADD COLUMN `category_id` INT UNSIGNED NULL
        COMMENT 'Reemplaza a category (texto libre). Migracion de datos en scripts/migrate_item_categories.php'
        AFTER `category`,
    ADD KEY `idx_items_category` (`category_id`),
    ADD CONSTRAINT `fk_items_category` FOREIGN KEY (`category_id`) REFERENCES `item_categories`(`id`);

ALTER TABLE `bins`
    ADD COLUMN `category_id` INT UNSIGNED NULL
        COMMENT 'Reserva esta ubicacion (tipicamente PICKING) para una categoria de producto. NULL = sin asignar, cualquier categoria puede ocuparla'
        AFTER `company_id`,
    ADD KEY `idx_bins_category` (`category_id`),
    ADD CONSTRAINT `fk_bins_category` FOREIGN KEY (`category_id`) REFERENCES `item_categories`(`id`);
