-- ---------------------------------------------------------------------------
-- A rotacao do hash da unidade sem derrubar quem nao trocou (D77, 03/09/2026).
--
--   docker compose exec -T mysql mysql -uroot -proot franquiabv_dev \
--     < scripts/migracao-unidade-hash-anterior.sql
--
-- O `hash` da unidade abre `/api/unidade/vendas` (V2 e V3), que devolvem o
-- faturamento. Rotacionar quebrava quem ja usa a URL, e nao se sabia quem era.
-- Tres colunas, e cada uma resolve uma coisa:
--
--   hash_anterior            rotacionar deixa de derrubar quem nao trocou
--   hash_anterior_expira_em  sem prazo nao ha rotacao, so acumulo
--   hash_anterior_usado_em   o inventario de quem ainda usa o antigo se
--                            escreve sozinho
--
-- IDEMPOTENTE: so acrescenta se `hash_anterior` nao existir. As tres vao num
-- ALTER so, e o ALTER do InnoDB e atomico: ou entram as tres, ou nenhuma.
--
-- ---------------------------------------------------------------------------
-- ESTA MIGRACAO PRECISA ESTAR EM PRODUCAO ANTES DO CORTE -- o passo 0 de
-- `docs/procedimento-de-corte.md` (D323).
--
-- As colunas entraram no `mysql.sql` em 03/09/2026 (1fd3cb7), sem migracao. O
-- passo 1 do corte refaz o `mysql.sql` a partir da estrutura de producao; sem
-- elas la, elas somem do `schema.sql` -- e a entidade `Unidade` as mapeia, entao
-- o Doctrine as pede em TODA leitura de unidade, e toda leitura falha. Nao sao
-- tres rotas: e qualquer tela que carregue a unidade. O codigo antigo de
-- producao nao as le nem as escreve, e a tabela tem uma linha por unidade.
-- ---------------------------------------------------------------------------

SET @existe = (
    SELECT COUNT(*) FROM information_schema.columns
     WHERE table_schema = DATABASE()
       AND table_name = 'unidades'
       AND column_name = 'hash_anterior'
);

SET @sql = IF(@existe = 0,
    'ALTER TABLE unidades
       ADD COLUMN hash_anterior VARCHAR(100) DEFAULT NULL
       AFTER hash,
       ADD COLUMN hash_anterior_expira_em DATETIME DEFAULT NULL
       AFTER hash_anterior,
       ADD COLUMN hash_anterior_usado_em DATETIME DEFAULT NULL
       AFTER hash_anterior_expira_em',
    'SELECT ''colunas ja existem, nada a fazer'' AS aviso'
);

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

-- Conferencia. Antes de qualquer rotacao, o esperado e nenhuma unidade com
-- hash anterior.
SELECT
    COUNT(*)                       AS unidades,
    SUM(hash_anterior IS NOT NULL) AS com_hash_anterior
FROM unidades;
