-- =============================================================================
-- Migración:    0002_create_tenant_features_table
-- Sprint:       1.2 — multi-tenancy core
-- Tabla:        tenant_features
-- Aplica en:    BD maestra (innovium_master)
-- Dependencias: 0001 (tenants).
--
-- Descripción:
--   Toggle de features (módulos) por tenant. El Tenant value object
--   carga estas filas lazy en el primer hasFeature($slug) y las cachea
--   en memoria para el request.
--
-- Notas de diseño:
--   - feature_slug: VARCHAR libre, sin ENUM. La lista de features crece
--     con cada sprint y un ENUM forzaría migración cada vez. Convención:
--     snake_case sin prefijo de tenant (ej: "acompanamiento_duelo").
--   - habilitada: TINYINT(1) en lugar de BOOLEAN porque MySQL los trata
--     igual y es la convención del proyecto (ver tenant.activo en users).
--   - configuracion: JSON opcional con settings específicos de la feature
--     (ej: {"psicologo_id": 12, "horario_max": "20:00"} para
--     acompanamiento_duelo).
--   - UNIQUE(tenant_id, feature_slug): un tenant no puede tener la misma
--     feature dos veces.
--   - ON DELETE RESTRICT: si alguna vez se borra físicamente un tenant
--     hay que limpiar features primero. Combinado con soft delete en
--     tenants, evitamos borrados en cascada accidentales.
-- =============================================================================

CREATE TABLE tenant_features (
    id              BIGINT UNSIGNED NOT NULL AUTO_INCREMENT
                    COMMENT 'PK auto-incremental.',
    tenant_id       BIGINT UNSIGNED NOT NULL
                    COMMENT 'FK → tenants.id (RESTRICT).',
    feature_slug    VARCHAR(50)     NOT NULL
                    COMMENT 'Identificador snake_case de la feature (ej: "acompanamiento_duelo").',
    habilitada      TINYINT(1)      NOT NULL DEFAULT 0
                    COMMENT '1=feature activa para este tenant, 0=desactivada.',
    configuracion   JSON                NULL
                    COMMENT 'Settings específicos de la feature en formato JSON. NULL = defaults.',
    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),
    UNIQUE KEY uq_tenant_features_tenant_slug (tenant_id, feature_slug),
    KEY idx_tenant_features_habilitada (habilitada),
    CONSTRAINT fk_tenant_features_tenant
        FOREIGN KEY (tenant_id) REFERENCES tenants (id)
        ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
  COMMENT='Toggle de features (módulos) habilitadas por tenant.';
