-- ---------------------------------------------------------------------------
-- Validade da pontuação por unidade.
--
--   docker compose exec -T mysql mysql -uroot -proot franquiabv_dev \
--     < scripts/migracao-pontuacao-validade-unidade.sql
--
-- A REGRA, dita por quem decide: a data de validade da pontuação deve ser
-- respeitada, e no dia seguinte ao vencimento os pontos saem do saldo. O prazo
-- passa a ser **configuração de unidade**, e não mais um ano fixo no código.
--
-- IDEMPOTENTE: só acrescenta a coluna se ela não existir.
--
-- ---------------------------------------------------------------------------
-- POR QUE O PADRÃO É 365
--
-- Porque é o que o sistema faz hoje, e o portão do corte é "o comportamento não
-- mudou". Com 365 em todas as unidades, esta migração não altera resultado
-- nenhum: ela só transfere o número do código para o banco, onde pode ser
-- mudado por quem decide.
--
-- O dado confirma que 365 é mesmo a regra vigente: entre os 58.927 créditos com
-- data de validade real, o intervalo dominante é de 365 e 366 dias após a
-- criação. Ver D53.
--
-- ---------------------------------------------------------------------------
-- ZERO SIGNIFICA "NÃO EXPIRA"
--
-- É a escolha deliberada, e a alternativa era pior. Se zero significasse "zero
-- dias de validade", uma unidade configurada com 0 — por engano, por campo
-- deixado em branco, por importação — apagaria o saldo de todos os seus
-- clientes na primeira madrugada.
--
-- "Não expira" é o comportamento seguro para o valor que alguém digita sem
-- pensar, e é uma configuração que faz sentido de verdade para uma unidade que
-- não queira vencimento.
-- ---------------------------------------------------------------------------

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

SET @sql = IF(@existe = 0,
    'ALTER TABLE unidades
       ADD COLUMN pontuacao_validade_dias INT NOT NULL DEFAULT 365
       COMMENT ''Dias de validade da pontuacao de fidelidade. 0 = nao expira.''
       AFTER fidelizacao_unidade_visitas',
    'SELECT ''coluna ja existe, nada a fazer'' AS aviso'
);

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

-- Conferência: todas as unidades com o padrão que reproduz o comportamento atual.
SELECT
    COUNT(*) AS unidades,
    SUM(pontuacao_validade_dias = 365) AS com_365,
    SUM(pontuacao_validade_dias = 0)   AS sem_vencimento,
    MIN(pontuacao_validade_dias)       AS menor,
    MAX(pontuacao_validade_dias)       AS maior
FROM unidades;
