-- =============================================================================
-- Migración:    0012_create_producto_variantes_table
-- Sprint:       1.3 — schema del catálogo
-- Tabla:        producto_variantes
-- Aplica en:    BD de cada tenant (innovium_<slug>)
-- Dependencias: 0011 (productos).
--
-- Descripción:
--   Variantes del mismo producto que NO justifican duplicar el padre:
--   "Urna Olmo medida especial" es la misma urna olmo, mismo precio
--   (en general), distinta medida o color. Evita duplicación.
--
-- Notas de diseño:
--   - ajuste_precio_clp default 0: la variante usa el precio del padre.
--     Si difiere, el ajuste se suma al precio_base_clp del producto.
--     Soporta valores negativos (variante más barata).
--   - sku NULLABLE: código de inventario opcional (puede compartir SKU
--     con el padre o tener uno propio).
--   - ON DELETE CASCADE: si el producto padre se borra físicamente,
--     sus variantes mueren con él. (Soft delete del padre NO afecta;
--     las variantes siguen ahí — la app filtra eliminado_en a nivel
--     producto.)
--   - Sin soft delete propio: si una variante deja de venderse, se
--     pone activo=0. Borrarla es DELETE físico vía CASCADE.
-- =============================================================================

CREATE TABLE producto_variantes (
    id                  BIGINT UNSIGNED NOT NULL AUTO_INCREMENT
                        COMMENT 'PK auto-incremental.',
    producto_id         BIGINT UNSIGNED NOT NULL
                        COMMENT 'FK → productos.id (CASCADE).',
    nombre_variante     VARCHAR(150)    NOT NULL
                        COMMENT 'Nombre de la variante (ej: "Medida especial", "XL", "Color claro").',
    sku                 VARCHAR(50)         NULL
                        COMMENT 'Código de inventario opcional. NULL = comparte con el padre.',
    ajuste_precio_clp   DECIMAL(10,2)   NOT NULL DEFAULT 0
                        COMMENT 'Suma al precio_base_clp del padre. 0=mismo precio. Acepta negativo.',
    orden_visual        INT             NOT NULL DEFAULT 0
                        COMMENT 'Orden ascendente para mostrar variantes del producto.',
    activo              TINYINT(1)      NOT NULL DEFAULT 1
                        COMMENT '1=visible, 0=oculta sin borrarla.',
    creado_en           DATETIME        NOT NULL DEFAULT CURRENT_TIMESTAMP
                        COMMENT 'UTC de creación. Inmutable.',
    actualizado_en      DATETIME        NOT NULL DEFAULT CURRENT_TIMESTAMP
                                                 ON UPDATE CURRENT_TIMESTAMP
                        COMMENT 'UTC de la última edición. Auto-actualizado por MySQL.',
    PRIMARY KEY (id),
    KEY idx_producto_variantes_producto (producto_id, orden_visual),
    KEY idx_producto_variantes_sku (sku),
    CONSTRAINT fk_producto_variantes_producto
        FOREIGN KEY (producto_id) REFERENCES productos (id)
        ON DELETE CASCADE ON UPDATE RESTRICT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
  COMMENT='Variantes de un producto (medida, color, etc) sin duplicar el catálogo principal.';
