-- Migration 056 (UP) — AP#13
-- Consolida ENUM status_lote / status_item: remove 'liquidado' (migra histórico → 'pago').
-- Motivação: dono pediu em 14/05/2026 — área do parceiro já usa só "Pago"; Bandeja Tef.Net tinha 2 status redundantes.
-- Padrão ALTER ENUM 3 passos (CLAUDE.md item 11) por causa de strict_trans_tables.
-- Inclui SET SESSION sql_mode = '' por segurança (CLAUDE.md item 12 — toca dados legados).
--
-- ESCOPO:
--   Tabela A: agente_lote_resgate.status_lote
--     ANTES: 'pendente_aprovacao','aguardando_pagamento','pago','liquidado','estornado','reprovado_tef_net','aprovado_parcial'
--     DEPOIS: 'pendente_aprovacao','aguardando_pagamento','pago','estornado','reprovado_tef_net','aprovado_parcial'
--
--   Tabela B: agente_apuracao_itens.status_item
--     ANTES: 'disponivel','em_lote','liquidado','estornado'
--     DEPOIS: 'disponivel','em_lote','pago','estornado'
--     Observação: status_item nunca teve 'pago' — entra como valor novo nesta consolidação
--     (alinhamento semântico com status_lote: ambos refletem o estado de pagamento).
--
-- PADRÃO 3 PASSOS POR TABELA:
--   Passo 1 — expandir ENUM mantendo velhos + novos
--   Passo 2 — UPDATE migra liquidado → pago
--   Passo 3 — ALTER final remove 'liquidado'
--
-- DESTRUTIVO: o UPDATE perde a distinção entre lotes/itens originalmente
-- 'liquidado' vs 'pago' (ambos viram 'pago'). Reversão via .down.sql só
-- restaura o domínio do ENUM, não o estado dos dados (vide cabeçalho do DOWN).

SET SESSION sql_mode = '';

-- =====================================================================
-- Tabela A — agente_lote_resgate.status_lote
-- =====================================================================

-- Passo A1: expandir (mantém 'liquidado' + adiciona nada novo; ENUM idêntico ao atual)
-- Necessário pra normalizar antes do UPDATE no MySQL strict mode.
ALTER TABLE agente_lote_resgate
  MODIFY status_lote ENUM(
    'pendente_aprovacao',
    'aguardando_pagamento',
    'pago',
    'liquidado',
    'estornado',
    'reprovado_tef_net',
    'aprovado_parcial'
  ) NOT NULL DEFAULT 'pendente_aprovacao'
  COMMENT 'Estado do lote no fluxo conta corrente (ADR-0010). Migration 056 (passo 1/3): ENUM expandido pra UPDATE seguro.';

-- Passo A2: migrar dados históricos 'liquidado' → 'pago'.
UPDATE agente_lote_resgate
   SET status_lote = 'pago'
 WHERE status_lote = 'liquidado';

-- Passo A3: ALTER final remove 'liquidado'.
ALTER TABLE agente_lote_resgate
  MODIFY status_lote ENUM(
    'pendente_aprovacao',
    'aguardando_pagamento',
    'pago',
    'estornado',
    'reprovado_tef_net',
    'aprovado_parcial'
  ) NOT NULL DEFAULT 'pendente_aprovacao'
  COMMENT 'Estado do lote no fluxo conta corrente (ADR-0010). AP#13/Migration 056: removido valor liquidado (consolidado em pago) — área do parceiro já usa só Pago; Bandeja Tef.Net tinha 2 status redundantes.';

-- =====================================================================
-- Tabela B — agente_apuracao_itens.status_item
-- =====================================================================

-- Passo B1: expandir (adiciona 'pago' antes de remover 'liquidado').
-- Mantém domínio antigo + novo durante o UPDATE.
ALTER TABLE agente_apuracao_itens
  MODIFY status_item ENUM(
    'disponivel',
    'em_lote',
    'liquidado',
    'pago',
    'estornado'
  ) NOT NULL DEFAULT 'disponivel'
  COMMENT 'Estado do item de apuracao. Migration 056 (passo 1/3): ENUM expandido com pago, ainda mantendo liquidado pro UPDATE.';

-- Passo B2: migrar dados históricos 'liquidado' → 'pago'.
UPDATE agente_apuracao_itens
   SET status_item = 'pago'
 WHERE status_item = 'liquidado';

-- Passo B3: ALTER final remove 'liquidado'.
ALTER TABLE agente_apuracao_itens
  MODIFY status_item ENUM(
    'disponivel',
    'em_lote',
    'pago',
    'estornado'
  ) NOT NULL DEFAULT 'disponivel'
  COMMENT 'Estado do item de apuracao. AP#13/Migration 056: removido valor liquidado (consolidado em pago) — alinhamento semantico com agente_lote_resgate.status_lote.';
