-- =====================================================================
-- MIGRATION 020 — Registro de Evolução da Demanda (estágio da mídia)
--
-- Objetivo: classificar cada mídia vinculada a uma demanda em um ESTÁGIO:
--     'initial'  -> situação inicial (mídias antigas e Demanda Rápida)
--     'progress' -> andamento (reservado; ainda não usado na UI)
--     'final'    -> situação final (nova "Situação final" da tela da demanda)
--
-- CARACTERÍSTICAS:
--   * IDEMPOTENTE: usa INFORMATION_SCHEMA para só criar coluna/índice quando
--     ainda não existem. Rodar novamente não altera nada (provado 2x).
--   * VARCHAR + guarda por INFORMATION_SCHEMA, NÃO ENUM. Justificativa:
--       - Compatível com MySQL 5.7/8.0+ e MariaDB 10.3+ sem depender de sintaxe
--         de ALTER de ENUM (que difere entre engines/versões);
--       - Permite adicionar novos estágios no futuro (ex.: 'progress') sem
--         precisar de um ALTER de tipo que reescreve a tabela;
--       - Alinha-se ao padrão já usado nas migrations 013 e 019 do projeto.
--     Os valores lógicos ('initial'/'progress'/'final') são garantidos na
--     camada PHP (MediaFile) — a coluna aceita o conjunto, com DEFAULT 'initial'.
--   * NÃO cria tabela nova. NÃO altera outras colunas. Só media_files.
--
-- Backfill: linhas EXISTENTES já recebem 'initial' pelo DEFAULT ao criar a
-- coluna; o UPDATE explícito abaixo é redundante-por-segurança e idempotente
-- (só toca mídias vinculadas a demanda que ainda não tenham estágio válido).
-- =====================================================================
SET NAMES utf8mb4;
SET @dbname = DATABASE();

-- 1) coluna demand_stage (só cria se ainda não existir)
SET @col_stage = (
    SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS
    WHERE TABLE_SCHEMA = @dbname
      AND TABLE_NAME   = 'media_files'
      AND COLUMN_NAME  = 'demand_stage'
);
SET @sql_stage = IF(@col_stage = 0,
    'ALTER TABLE media_files ADD COLUMN demand_stage VARCHAR(20) NOT NULL DEFAULT ''initial'' AFTER demand_id',
    'SELECT ''demand_stage already exists'' AS msg'
);
PREPARE stmt FROM @sql_stage; EXECUTE stmt; DEALLOCATE PREPARE stmt;

-- 2) índice composto (demand_id, demand_stage) — via INFORMATION_SCHEMA.STATISTICS
SET @idx_stage = (
    SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS
    WHERE TABLE_SCHEMA = @dbname
      AND TABLE_NAME   = 'media_files'
      AND INDEX_NAME   = 'idx_media_demand_stage'
);
SET @sql_idx = IF(@idx_stage = 0,
    'ALTER TABLE media_files ADD INDEX idx_media_demand_stage (demand_id, demand_stage)',
    'SELECT ''idx_media_demand_stage already exists'' AS msg'
);
PREPARE stmt FROM @sql_idx; EXECUTE stmt; DEALLOCATE PREPARE stmt;

-- 3) Backfill idempotente: toda mídia vinculada a uma demanda cujo estágio NÃO
--    seja um dos valores lógicos conhecidos passa a 'initial' (mídias antigas).
UPDATE media_files
   SET demand_stage = 'initial'
 WHERE demand_id IS NOT NULL
   AND (demand_stage IS NULL
        OR demand_stage NOT IN ('initial', 'progress', 'final'));
