-- Migration 038 — RES#2 Sprint D (10/05/2026 madrugada virada 3).
--
-- B#13 — Denormaliza `competencia` (YYYY-MM) na propria tabela
-- `agente_lote_resgate`.
--
-- Motivo:
--   Antes desta migration a competencia era derivada via JOIN:
--     agente_lote_resgate
--       -> agente_lote_item
--          -> agente_apuracao_itens
--             -> agente_apuracao_periodos.competencia
--   Quando o lote eh REPROVADO (Sprint B), `resgate_reprovar.php` faz
--   DELETE em `agente_lote_item` pra devolver disponibilidade. O JOIN
--   passa a retornar NULL e o frontend agrupa o lote em "Sem-Competencia"
--   (B#13 visivel em #lotes). Lote precisa preservar a competencia mesmo
--   apos o DELETE — denormalizamos.
--
-- Schema novo:
--   agente_lote_resgate.competencia VARCHAR(7) NOT NULL DEFAULT ''
--     COMMENT 'YYYY-MM, denormalizado pra preservar agrupamento pos-reprovacao'
--   + INDEX idx_lote_competencia (competencia)
--
-- Backfill:
--   Lotes que AINDA tem itens vivos: derivam via JOIN GROUP BY (1 row por lote).
--   Lotes que perderam itens (reprovados pre-038): ficam com '' — serao mostrados
--   em grupo "Sem-Competencia" pelo frontend (legado). Como nao havia reprovados
--   anteriores em produção, essa fallback eh esperada pra rows sinteticas de
--   smoke.
--
-- Idempotente via IF NOT EXISTS-like (verificado pelo migrate.php).

SET SESSION sql_mode = '';

ALTER TABLE agente_lote_resgate
  ADD COLUMN competencia VARCHAR(7) NOT NULL DEFAULT '' COMMENT 'YYYY-MM, denormalizado pra preservar agrupamento mesmo apos resgate_reprovar deletar agente_lote_item (B#13)' AFTER cod_Representante,
  ADD INDEX idx_lote_competencia (competencia);

-- Backfill: lotes que AINDA tem itens derivam via JOIN.
-- Subquery agrega por (lote_id, competencia) pra evitar conflito UPDATE-from-target.
UPDATE agente_lote_resgate l
INNER JOIN (
  SELECT li.lote_id, MIN(ap.competencia) AS competencia
  FROM agente_lote_item li
  INNER JOIN agente_apuracao_itens ai ON ai.id = li.apuracao_item_id
  INNER JOIN agente_apuracao_periodos ap ON ap.id = ai.apuracao_id
  GROUP BY li.lote_id
) src ON src.lote_id = l.id
SET l.competencia = src.competencia
WHERE l.competencia = '';
