-- ---------------------------------------------------------------------------
-- O custo do produto em cada item vendido, gravado na hora da venda (03/11/2026, a
-- fatia 74b da fila das telas que faltam, PDV-CUSTO-DO-ITEM; a resposta 224 (b) do dono,
-- de 15/10/2026, "Sim, daqui em diante", a secao 3 de `docs/f3-relatorios/spec-produtos.md`
-- e o D627).
--
--   mysql franquia_producao < scripts/migracao-custo-do-item.sql
--
--   vendas_produtos.custo_unitario  o custo do cadastro (`produtos.valor_compra`) POR
--                                   UNIDADE, na hora em que o item entrou na venda; so no
--                                   produto de estoque (Barbearia, Emporio, Insumo); NULL
--                                   no servico, no pacote, na sessao de pacote e em todo
--                                   item de antes desta coluna (sem registro)
--
-- POR UNIDADE, como `valor_unitario`, e nao do item inteiro: o ajuste da quantidade (o "+" e
-- o "-" da comanda nova) relanca a linha com o mesmo preco unitario, e o custo do item e o
-- unitario vezes a quantidade de agora -- a conta que a margem faz, em centavos.
--
-- SO A COLUNA: quem a grava e o PDV (`VendaProdutoService`, o escritor unico; a agenda passa
-- por ele), e a linha `custoDoItem` de `colunas_gravadas` vai num passo proprio, DEPOIS do
-- codigo que grava (`scripts/colunas-gravadas-custo-do-item.sql`; a nota 4 da fatia 70).
-- O passado NAO se reescreve: o custo de hoje do cadastro nao e o da epoca (e no pacote e o
-- preco copiado, o D624).
--
-- 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 (a conferencia do
-- `information_schema`). NAO COPIA A TABELA: coluna anulavel, sem padrao e sem chave,
-- `ALGORITHM=INSTANT` (o MySQL 8.4 recusa o `ALTER` em vez de copiar, se nao puder). Medido
-- na copia (3,26 milhoes de itens): ver o `docs/roadmap.md`, a entrada da fatia 74b.
--
-- PARA DESFAZER:
--   ALTER TABLE vendas_produtos DROP COLUMN custo_unitario;
--
-- ---------------------------------------------------------------------------
-- 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; nula, ela nao muda conta nenhuma.
-- ---------------------------------------------------------------------------

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

SET @sql = IF(@existe = 0,
    'ALTER TABLE vendas_produtos
       ADD COLUMN custo_unitario double DEFAULT NULL
       COMMENT ''O custo do cadastro por unidade, na hora da venda; so no produto de estoque. NULL = sem registro.''
       AFTER valor_unitario,
       ALGORITHM=INSTANT',
    'SELECT ''vendas_produtos: coluna ja existe, nada a fazer'' AS aviso'
);

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

-- Conferencia. O esperado logo depois da migracao: nenhum item com o custo.
SELECT COUNT(*) AS itens, SUM(custo_unitario IS NOT NULL) AS com_custo FROM vendas_produtos;
