-- ---------------------------------------------------------------------------
-- O motivo da saida do estoque (03/11/2026, a fatia 70 da fila das telas que
-- faltam, PDV-CANCELAMENTO; a P0 de `docs/f3-relatorios/spec-ordem.md`, secao 4.1,
-- a pergunta 9 do dono).
--
--   mysql franquia_producao < scripts/migracao-produtos-estoque-motivo.sql
--
-- `produtos_estoque.motivo`: `uso`, `perda`, `vencimento` ou `acerto`, para a Retirada
-- separar a perda e o acerto do uso interno. NULO em toda movimentacao de antes, na
-- entrada, e ate a saida passar a pedir o motivo.
--
-- SO A COLUNA, SEM ESCRITOR NEM DATA: quem a grava (a saida pela tela antiga, pela API e
-- pelo `Estoque.tsx`; a retirada grava `uso`) e a linha `motivoDaRetirada` de
-- `colunas_gravadas` entram na fatia 73 (PDV-MOTIVO-DA-RETIRADA), num passo proprio que
-- roda DEPOIS do codigo que grava (a nota 4 da fatia 70).
--
-- NA COPIA LOCAL DESDE 03/11/2026, nos dois bancos (a resposta 83 do dono, a opcao (a)).
--
-- IDEMPOTENTE: o `ALTER` so roda se a coluna ainda nao existir. NAO COPIA A TABELA:
-- `ALGORITHM=INSTANT`; se o servidor recusar, para com erro sem mudar nada.
--
-- PARA DESFAZER: `ALTER TABLE produtos_estoque DROP COLUMN motivo;`
--
-- ---------------------------------------------------------------------------
-- ESTA MIGRACAO PRECISA ESTAR EM PRODUCAO ANTES DO PASSO 1 -- o passo 0 (D323). O codigo
-- antigo de producao nao a le nem a escreve.
-- ---------------------------------------------------------------------------

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

SET @sql = IF(@existe = 0,
    'ALTER TABLE produtos_estoque
       ADD COLUMN motivo varchar(12) DEFAULT NULL
       COMMENT ''O motivo da saida: uso, perda, vencimento ou acerto. NULL = sem registro.''
       AFTER cancelamento_motivo,
       ALGORITHM=INSTANT',
    'SELECT ''produtos_estoque: coluna ja existe, nada a fazer'' AS aviso'
);

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

-- Conferencia. O esperado: nenhuma movimentacao com o motivo.
SELECT COUNT(*) AS movimentacoes, SUM(motivo IS NOT NULL) AS com_motivo FROM produtos_estoque;
