-- Base de "Presentaciones por Item" (fase fundacional -- solo tabla + pantalla de
-- mantenimiento, NO conecta todavia a ningun circuito real de SAP/Picking/Despacho/
-- Devoluciones/Crear ST). Ver plan completo en memoria "PLAN PRESENTACIONES de productos".
-- Sirve tambien de referencia para que COMFAR alinee su propia configuracion de UoM en SAP.

-- 1) Tabla de presentaciones por item (adapta el esquema ya probado en XPERT_SAPB1).
CREATE TABLE IF NOT EXISTS item_uom_presentations (
    id                 INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    item_id            INT UNSIGNED NOT NULL,
    presentation_name  VARCHAR(50)  NOT NULL,
    sap_uom_code       VARCHAR(20)  NOT NULL,
    barcode            VARCHAR(100) NULL,
    qty_per_base_uom   DECIMAL(12,4) NOT NULL DEFAULT 1.0000,
    is_base_unit       TINYINT(1)   NOT NULL DEFAULT 0,
    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_item_pres_name (item_id, presentation_name),
    UNIQUE KEY uq_item_pres_code (item_id, sap_uom_code),
    KEY idx_item_uom_pres_item (item_id),
    CONSTRAINT fk_item_uom_pres_item FOREIGN KEY (item_id) REFERENCES items(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- 2) Catalogo chico de codigos UoM de SAP, se completa con el uso real (ver ItemController::
--    createUomPresentation, hace INSERT IGNORE del codigo recibido). Arranca con un set
--    minimo de referencia.
CREATE TABLE IF NOT EXISTS sap_uom_codes (
    code       VARCHAR(20)  NOT NULL PRIMARY KEY,
    name       VARCHAR(100) NOT NULL,
    is_active  TINYINT(1)   NOT NULL DEFAULT 1
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

INSERT IGNORE INTO sap_uom_codes (code, name) VALUES
  ('UN', 'Unidad'), ('CJ', 'Caja'), ('BLI', 'Blister'),
  ('PAL', 'Pallet'), ('KG', 'Kilogramo'), ('LT', 'Litro');

-- 3) Registrar en el menu (grupo "parametros", ultimo lugar). El menu se gatea 100% desde
--    menu_groups/menu_items/menu_role_access -- sin esto el nav item queda invisible para
--    todos los roles incluido admin (leccion aprendida hoy mismo con stock_kardex).
INSERT INTO menu_items (group_id, view_key, name, sort_order, is_active)
SELECT g.id, 'item_presentations', 'Presentaciones', 5, 1
FROM menu_groups g
WHERE g.code = 'parametros'
  AND NOT EXISTS (SELECT 1 FROM menu_items WHERE view_key = 'item_presentations');

-- Mismo acceso por rol que el resto de "parametros" (zonif_familia): admin/jefe/supervisor
-- FULL, auditor/op_almacen READ.
INSERT INTO menu_role_access (menu_item_id, role, access_type)
SELECT ni.id, old_access.role, old_access.access_type
FROM menu_items ni
JOIN (
  SELECT a.role, a.access_type
  FROM menu_role_access a
  JOIN menu_items i ON i.id = a.menu_item_id
  WHERE i.view_key = 'zonif_familia'
) old_access ON 1=1
WHERE ni.view_key = 'item_presentations'
AND NOT EXISTS (
  SELECT 1 FROM menu_role_access existing
  WHERE existing.menu_item_id = ni.id AND existing.role = old_access.role
);
