-- Migration 056 (DOWN) — AP#13
-- REVERTE ENUM removendo o valor 'liquidado' do passo 1, mas NÃO RECUPERA quais
-- lotes/itens eram originalmente 'liquidado' (UP fez UPDATE destrutivo).
-- Esta migration é "best effort" — só restaura o domínio do ENUM, não o estado dos dados.
--
-- ESCOPO:
--   Tabela A: agente_lote_resgate.status_lote
--     ANTES (estado pos-UP): 'pendente_aprovacao','aguardando_pagamento','pago','estornado','reprovado_tef_net','aprovado_parcial'
--     DEPOIS (estado pos-DOWN): 'pendente_aprovacao','aguardando_pagamento','pago','liquidado','estornado','reprovado_tef_net','aprovado_parcial'
--                                (= mesmo dominio da Migration 050)
--
--   Tabela B: agente_apuracao_itens.status_item
--     ANTES (estado pos-UP): 'disponivel','em_lote','pago','estornado'
--     DEPOIS (estado pos-DOWN): 'disponivel','em_lote','liquidado','estornado'
--                                (= dominio original da Migration 005, removendo 'pago' que foi introduzido no UP)
--
-- IMPORTANTE — limitacao do DOWN:
--   No UP, lotes/itens originalmente 'liquidado' foram migrados pra 'pago' via
--   UPDATE irreversivel. Este DOWN NAO os converte de volta — eles permanecem
--   como 'pago' (valor preservado tanto pre-UP quanto pos-DOWN em status_lote).
--   Em status_item, como 'pago' deixa de existir no dominio, qualquer linha que
--   tenha esse valor PRECISA ser remapeada antes do ALTER final — fazemos isso
--   via UPDATE pra 'liquidado' (mas perdemos a distincao semantica de quem era
--   originalmente 'liquidado' vs quem nunca foi).

SET SESSION sql_mode = '';

-- =====================================================================
-- Tabela A — agente_lote_resgate.status_lote
-- =====================================================================
-- Re-adiciona 'liquidado' no dominio. Linhas que estao em 'pago' permanecem
-- 'pago' (nao temos como saber quais eram originalmente 'liquidado').

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). DOWN Migration 056: dominio restaurado, mas estado dos dados NAO foi recuperado.';

-- =====================================================================
-- Tabela B — agente_apuracao_itens.status_item
-- =====================================================================
-- Aqui precisamos remapear 'pago' -> 'liquidado' ANTES do ALTER final, pois
-- 'pago' nao existe no dominio original. Best effort: tudo que estava 'pago'
-- pos-UP era ou (a) item que estava 'liquidado' pre-UP, OU (b) item criado/atualizado
-- pra 'pago' durante o periodo em que a Migration 056 vigorava (cenario nao
-- esperado — apuracao_itens nao deveria estar sendo escrito como 'pago' fora
-- do fluxo normal de liquidacao). Em qualquer caso, 'liquidado' e o melhor
-- proxy retroativo.

-- Passo B0 (DOWN): expandir dominio mantendo 'pago' + 'liquidado' simultaneamente
-- pra UPDATE seguro em strict mode.
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. DOWN Migration 056 (passo 1/3): dominio expandido pro UPDATE.';

-- Passo B1 (DOWN): remapear pago -> liquidado.
UPDATE agente_apuracao_itens
   SET status_item = 'liquidado'
 WHERE status_item = 'pago';

-- Passo B2 (DOWN): ALTER final remove 'pago', voltando ao dominio original da Migration 005.
ALTER TABLE agente_apuracao_itens
  MODIFY status_item ENUM(
    'disponivel',
    'em_lote',
    'liquidado',
    'estornado'
  ) NOT NULL DEFAULT 'disponivel'
  COMMENT 'Estado do item de apuracao. DOWN Migration 056: dominio restaurado (Migration 005). Itens que estavam pago foram remapeados pra liquidado (best effort — perde-se distincao semantica).';
