-- ============================================================
--  Migración 2026-10-14_04 · Ítems dentro de cada oferta
-- ------------------------------------------------------------
--  Una oferta se arma con uno o más ÍTEMS; cada ítem es normalmente un
--  paquete (automatizado o manual) y a cualquier ítem se le pueden
--  agregar materiales de la lista de costos (paquete_producto).
--  cotizacion_venta_oferta_item: titulo, de qué paquete salió y con qué
--    datos (paquete_parametros, JSON), orden.
--  cotizacion_venta_material.id_item: el ítem de la línea (id_oferta se
--    conserva para las consultas por oferta).
--  Datos existentes: cada oferta queda con un ítem con sus líneas; el
--  paquete de la oferta (id_paquete / paquete_parametros, migración
--  2026-10-14_03) pasa a su ítem y esas columnas se quitan de la oferta.
-- ============================================================
USE tinsa_db;

CREATE TABLE `cotizacion_venta_oferta_item` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `id_oferta` int(10) unsigned NOT NULL,
  `titulo` varchar(200) NOT NULL,
  `id_paquete` int(10) unsigned DEFAULT NULL,
  `paquete_parametros` text DEFAULT NULL,
  `orden` int(11) NOT NULL DEFAULT 0,
  `created_at` timestamp NOT NULL DEFAULT current_timestamp(),
  PRIMARY KEY (`id`),
  KEY `idx_cvoi_oferta` (`id_oferta`),
  KEY `fk_cvoi_paquete` (`id_paquete`),
  CONSTRAINT `fk_cvoi_oferta` FOREIGN KEY (`id_oferta`) REFERENCES `cotizacion_venta_oferta` (`id`) ON DELETE CASCADE,
  CONSTRAINT `fk_cvoi_paquete` FOREIGN KEY (`id_paquete`) REFERENCES `paquete` (`id`) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

INSERT INTO cotizacion_venta_oferta_item (id_oferta, titulo, id_paquete, paquete_parametros, orden, created_at)
SELECT o.id, COALESCE(NULLIF(o.nombre, ''), 'Materiales'), o.id_paquete, o.paquete_parametros, 0, o.created_at
  FROM cotizacion_venta_oferta o;

ALTER TABLE `cotizacion_venta_material`
  ADD COLUMN `id_item` int(10) unsigned DEFAULT NULL AFTER `id_oferta`;

UPDATE cotizacion_venta_material m
  JOIN cotizacion_venta_oferta_item i ON i.id_oferta = m.id_oferta
   SET m.id_item = i.id;

ALTER TABLE `cotizacion_venta_material`
  MODIFY `id_item` int(10) unsigned NOT NULL,
  ADD KEY `idx_cvm_item` (`id_item`),
  ADD CONSTRAINT `fk_cvm_item` FOREIGN KEY (`id_item`) REFERENCES `cotizacion_venta_oferta_item` (`id`) ON DELETE CASCADE;

ALTER TABLE `cotizacion_venta_oferta`
  DROP FOREIGN KEY `fk_cvo_paquete`,
  DROP KEY `fk_cvo_paquete`,
  DROP COLUMN `paquete_parametros`,
  DROP COLUMN `id_paquete`;
