-- ---------------------------------------------------------------------------
-- A regra do cupom de cada sorteio, e o numero de cada cupom (D561, o pedido do
-- dono de 21/10/2026: "implemente a opcao de gerar um cupom por valor, por
-- servico" -- as duas escolhas dele: "o cadastro escolhe a regra" e "trocar a
-- regra do banco").
--
--   mysql franquia_producao < scripts/migracao-sorteios-regra-do-cupom.sql
--
-- Roda no laco do passo 0 de `docs/procedimento-de-corte.md`, em PRODUCAO, e no
-- laco da copia do desenvolvimento de `docs/ensaio-geral-do-corte.md`, contra a
-- `franquiabv_dev`; os bancos da suite ja nascem com as colunas (`mysql.sql`, e o
-- `postgres/schema.sql` do gerador). NA COPIA LOCAL DESDE 21/10/2026, nos dois
-- bancos, pela resposta 83 do dono (a opcao (a): o esquema que so acrescenta entra
-- nas duas copias locais quando a resposta pedir). A base do teste do BVIP fica sem
-- elas ate a proxima copia exportada daqui, pela mao do dono.
--
-- O QUE AS COLUNAS QUEREM DIZER:
--
-- - `sorteios.regra_cupom`: como a venda finalizada ganha cupom NESTE sorteio --
--   `venda` (um cupom por venda, a regra de sempre e o padrao: TODOS os sorteios
--   de antes ficam nela), `valor` (um cupom a cada R$ `valor_cupom` do valor da
--   venda) ou `servico` (um cupom por servico lancado na venda, pela quantidade;
--   os produtos nao contam). Escolhida no cadastro pela tela nova; nao muda depois
--   do primeiro cupom.
-- - `sorteios.valor_cupom`: o X da regra `valor`, em reais com centavos; nulo nas
--   outras duas.
-- - `sorteios_vendas.numero`: o numero do cupom DENTRO da venda (1, 2, 3...). Na
--   regra `venda` e sempre 1 -- o de todo cupom de antes, pelo padrao. A venda de
--   R$ 120 num sorteio de "a cada R$ 50" tem os cupons 1 e 2.
--
-- O INDICE UNICO (sorteio, venda, numero) NAO ESTA AQUI: os 4 cupons repetidos da
-- producao (4 pares com o mesmo numero 1, depois desta migracao) saem antes dele,
-- e isso apaga linha -- vai ao passo 3 da janela
-- (`scripts/migracao-sorteios-vendas-unicos.sql`; as respostas 124 (a) e 218 (a)).
--
-- IDEMPOTENTE: cada coluna so e acrescentada se nao existir.
--
-- NAO COPIA AS TABELAS: `ALGORITHM=INSTANT`, colunas no fim (6 sorteios e 7.212
-- cupons na copia em 21/10/2026). Se o servidor recusar o INSTANT, o `ALTER` para
-- com erro, em vez de reescrever a tabela em silencio: rodar sem o `ALGORITHM`
-- copia a tabela, e e para fora do movimento -- a finalizacao da venda grava os
-- cupons.
--
-- ---------------------------------------------------------------------------
-- ESTA MIGRACAO PRECISA ESTAR EM PRODUCAO ANTES DO CORTE -- o passo 0 de
-- `docs/procedimento-de-corte.md` (D323).
--
-- O passo 1 do corte refaz o `mysql.sql` a partir da estrutura de producao; sem
-- as colunas la, elas somem do `schema.sql`, e todo sorteio volta a ser "um
-- cupom por venda": o codigo pergunta se elas existem
-- (`ISBase\Doctrine\ColunaNoBanco`), e nao quebra -- a tela nova recusa a regra
-- por valor e por servico, com a frase de que o banco ainda nao as tem. As
-- entidades NAO as mapeiam, de proposito: a base do teste do BVIP nao as tem ate a
-- proxima copia exportada, e a entidade mapeada pediria a coluna em toda leitura
-- de sorteio e de cupom (o D473). O codigo antigo de producao nao as le nem as
-- escreve, e os padroes cobrem o `INSERT` dele.
-- ---------------------------------------------------------------------------

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

SET @sql = IF(@existe = 0,
    'ALTER TABLE sorteios
       ADD COLUMN regra_cupom varchar(10) NOT NULL DEFAULT ''venda''
       COMMENT ''Como a venda ganha cupom: venda (1 por venda), valor (1 a cada valor_cupom reais) ou servico (1 por servico lancado). D561.'',
       ADD COLUMN valor_cupom decimal(10,2) DEFAULT NULL
       COMMENT ''O valor de cada cupom na regra valor; nulo nas outras. D561.'',
       ALGORITHM=INSTANT',
    'SELECT ''colunas da regra do cupom ja existem, nada a fazer'' AS aviso'
);

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

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

SET @sql = IF(@existe = 0,
    'ALTER TABLE sorteios_vendas
       ADD COLUMN numero int NOT NULL DEFAULT ''1''
       COMMENT ''O numero do cupom dentro da venda: 1, 2, 3... Na regra venda, sempre 1. D561.'',
       ALGORITHM=INSTANT',
    'SELECT ''coluna do numero do cupom ja existe, nada a fazer'' AS aviso'
);

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

-- Conferencia. Antes do codigo novo no ar, o esperado e todo sorteio na regra
-- `venda`, sem valor, e todo cupom com o numero 1.
SELECT
    COUNT(*)                                     AS sorteios,
    SUM(regra_cupom = 'venda')                   AS por_venda,
    SUM(valor_cupom IS NOT NULL)                 AS com_valor
FROM sorteios;

SELECT
    COUNT(*)                  AS cupons,
    SUM(numero = 1)           AS numero_um
FROM sorteios_vendas;
