-- =============================================================================
-- Migración:    0010_create_niveles_table
-- Sprint:       1.3 — schema del catálogo
-- Tabla:        niveles
-- Aplica en:    BD de cada tenant (innovium_<slug>)
-- Dependencias: ninguna (no tiene FKs).
--
-- Descripción:
--   Gama o clase del producto (Austero, Tradicional, Premium, etc.).
--   Cada tenant define los suyos — sin restricción de cantidad ni
--   nomenclatura. Ejemplos:
--     · Funeraria A: Austero (1) / Tradicional (2) / Premium (3)
--     · Funeraria B: Clase C (1) / Clase B (2) / Clase A (3)
--     · Funeraria C: Económico (1) / Estándar (2) / Plus (3) / Élite (4)
--
-- Notas de diseño:
--   - slug UNIQUE: identificador URL-friendly por tenant.
--   - orden_visual: 1=más bajo, valores más altos = niveles superiores.
--     Usado para sorting natural y para `eleccion_nivel` en plan lines.
--   - color_hex: chip de color para UI (ej: "#22D3EE"). NULL = sin chip.
--   - Sprint 1.3 deja la tabla vacía. Sprint 1.4 trae UI para cargar.
-- =============================================================================

CREATE TABLE niveles (
    id              BIGINT UNSIGNED NOT NULL AUTO_INCREMENT
                    COMMENT 'PK auto-incremental.',
    slug            VARCHAR(50)     NOT NULL
                    COMMENT 'Identificador URL (ej: "austero", "premium"). UNIQUE por tenant.',
    nombre          VARCHAR(100)    NOT NULL
                    COMMENT 'Nombre legible (ej: "Austero", "Tradicional Plus", "Clase A").',
    descripcion     TEXT                NULL
                    COMMENT 'Descripción larga opcional.',
    orden_visual    INT             NOT NULL DEFAULT 0
                    COMMENT '1=nivel más bajo, valores mayores = niveles superiores.',
    color_hex       VARCHAR(7)          NULL
                    COMMENT 'Color hex para chip UI (ej: "#22D3EE"). NULL = sin chip de color.',
    activo          TINYINT(1)      NOT NULL DEFAULT 1
                    COMMENT '1=visible, 0=oculto sin borrarlo.',
    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.',
    eliminado_en    DATETIME            NULL
                    COMMENT 'UTC del soft-delete. NULL = activo.',
    PRIMARY KEY (id),
    UNIQUE KEY uq_niveles_slug (slug),
    KEY idx_niveles_activo_orden (activo, orden_visual),
    KEY idx_niveles_eliminado_en (eliminado_en)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
  COMMENT='Gama del producto (Austero/Tradicional/Premium o equivalente). Cada tenant define los suyos.';
