-- ---------------------------------------------------------------------------
-- A cota-parte do pacote para quem o vendeu, por sessao executada (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 16 do dono e o D310).
--
--   mysql franquia_producao < scripts/migracao-cota-do-pacote.sql
--
--   produtos.cota_parte_pacote        o % de cota-parte de quem vendeu o pacote, lido so
--                                     no tipo `pac`; 0 por padrao: nada muda ate alguem
--                                     configurar
--   vendas_produtos.vendedor_do_pacote  na sessao de pacote, quem vendeu o pacote
--   vendas_produtos.cota_do_vendedor  a cota dele naquela sessao (o tipo de `comissao`)
--
-- SO AS COLUNAS, SEM ESCRITOR NEM DATA: o cadastro do pacote com o campo, a finalizacao
-- da sessao gravando o vendedor e a cota, e a linha `cotaDoPacote` de `colunas_gravadas`
-- entram na fatia 74 (PDV-COTA-DO-PACOTE), num passo proprio que roda DEPOIS do codigo
-- que grava (a nota 4 da fatia 70). A cota de quem executa a sessao nao muda.
--
-- NA COPIA LOCAL DESDE 03/11/2026, nos dois bancos (a resposta 83 do dono, a opcao (a)).
--
-- IDEMPOTENTE: cada `ALTER` so roda se a coluna ainda nao existir.
-- `produtos` NAO COPIA (`ALGORITHM=INSTANT`, coluna com padrao); `vendas_produtos` COPIA:
-- a chave estrangeira, com `foreign_key_checks` ligado, so entra pelo algoritmo COPY.
-- Rode fora do movimento.
--
-- PARA DESFAZER:
--   ALTER TABLE vendas_produtos DROP FOREIGN KEY FK_VENDAS_PRODUTOS_vendedor_do_pacote,
--     DROP KEY FK_VENDAS_PRODUTOS_vendedor_do_pacote, DROP COLUMN vendedor_do_pacote,
--     DROP COLUMN cota_do_vendedor;
--   ALTER TABLE produtos DROP COLUMN cota_parte_pacote;
--
-- ---------------------------------------------------------------------------
-- ESTA MIGRACAO PRECISA ESTAR EM PRODUCAO ANTES DO PASSO 1 -- o passo 0 (D323). O codigo
-- antigo de producao nao as le nem as escreve; o padrao 0 nao muda conta nenhuma.
-- ---------------------------------------------------------------------------

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

SET @sql = IF(@existe = 0,
    'ALTER TABLE produtos
       ADD COLUMN cota_parte_pacote double NOT NULL DEFAULT ''0''
       COMMENT ''O % de cota-parte de quem vendeu o pacote, por sessao; so no tipo pac (D310).''
       AFTER pacote_validade_dias,
       ALGORITHM=INSTANT',
    'SELECT ''produtos: coluna ja existe, 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 = 'vendas_produtos'
       AND column_name = 'vendedor_do_pacote'
);

SET @sql = IF(@existe = 0,
    'ALTER TABLE vendas_produtos
       ADD COLUMN vendedor_do_pacote int DEFAULT NULL
       COMMENT ''Na sessao de pacote, quem vendeu o pacote. NULL = sem registro.''
       AFTER comissao,
       ADD COLUMN cota_do_vendedor double DEFAULT NULL
       COMMENT ''A cota de quem vendeu o pacote nesta sessao. NULL = sem registro.''
       AFTER vendedor_do_pacote,
       ADD KEY FK_VENDAS_PRODUTOS_vendedor_do_pacote (vendedor_do_pacote),
       ADD CONSTRAINT FK_VENDAS_PRODUTOS_vendedor_do_pacote
           FOREIGN KEY (vendedor_do_pacote) REFERENCES usuarios (id)',
    'SELECT ''vendas_produtos: colunas ja existem, nada a fazer'' AS aviso'
);

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

-- Conferencia. O esperado: todo produto com 0, e nenhuma sessao com o vendedor.
SELECT COUNT(*) AS produtos, SUM(cota_parte_pacote <> 0) AS com_cota FROM produtos;
SELECT COUNT(*) AS itens, SUM(vendedor_do_pacote IS NOT NULL) AS com_vendedor FROM vendas_produtos;
