#!/usr/bin/env bash
#
# Monta localmente o banco que o CI usa para a suíte de contrato.
#
# O CI carrega `mysql.sql` (estrutura de produção) mais
# `tests/Caracterizacao/fixtures.sql` (cenário determinístico). O banco de
# desenvolvimento aqui tem a cópia anonimizada da produção por cima, que é
# outra coisa: contra ela os contratos gravariam a estrutura do dado real, e
# no CI passariam a falhar.
#
# Regravar snapshot de contrato SEM usar este banco é o erro que este script
# existe para evitar.
#
# Uso:  scripts/montar-banco-contrato.sh [nome-do-banco]

set -euo pipefail

BANCO="${1:-franquiabv_contrato}"

mysql_() {
    docker compose exec -T mysql mysql -uroot -proot "$@" 2>&1 \
        | grep -v "Using a password" || true
}

# Carrega da entrada padrão e ACUSA se o mysql reclamar.
#
# A primeira versão deste script filtrava a saída com `| grep -v ... || true`,
# o que engolia os erros do mysql junto com o aviso da senha. As fixtures
# abortaram na metade por chave estrangeira e o script seguiu dizendo que
# estava tudo bem -- e os snapshots quase foram regravados contra um banco pela
# metade. Um carregador que não sabe falhar é pior que nenhum.
carregar() {
    local rotulo="$1" saida
    saida=$(docker compose exec -T mysql sh -c "mysql -uroot -proot ${BANCO}" 2>&1 \
            | grep -v "Using a password" || true)

    if printf '%s' "$saida" | grep -qi "ERROR"; then
        echo "FALHOU ao carregar ${rotulo}:" >&2
        printf '%s\n' "$saida" >&2
        exit 1
    fi
}

echo "Recriando ${BANCO}..."
mysql_ -e "DROP DATABASE IF EXISTS ${BANCO}; CREATE DATABASE ${BANCO} CHARACTER SET utf8mb4;"

# O dump traz `SET @@GLOBAL.GTID_PURGED`, que só é aceito num servidor sem GTID
# executado -- verdade no runner do CI, falso num contêiner que já rodou.
echo "Carregando a estrutura (mysql.sql)..."
grep -v "GTID_PURGED" mysql.sql | carregar "mysql.sql"

echo "Carregando o cenario (fixtures.sql)..."
carregar "fixtures.sql" < tests/Caracterizacao/fixtures.sql

# A IMPRESSAO DIGITAL DO CENARIO ERA GRAVADA AQUI, e desde 07/09/2026 nao e
# mais: ela mora dentro do `fixtures.sql`, que a grava ao ser carregado.
#
# O motivo da mudanca: este roteiro cobria UM banco. Os de desenvolvimento,
# que ninguem monta, envelheciam do mesmo jeito e sem marca nenhuma --
# `rodar-caracterizacao.sh` chegou a mostrar 45 vermelhos sobre testes que o CI
# dava como verdes. Sao SETE lugares que carregam fixtures; pedir a cada um que
# lembre de marcar era pedir para um deles esquecer.

# A aplicação conecta como `franquiabv`, não como root.
mysql_ -e "GRANT ALL ON ${BANCO}.* TO 'franquiabv'@'%'; FLUSH PRIVILEGES;"

echo
echo "Conteudo:"
mysql_ "${BANCO}" -e "
SELECT 'unidades' t, COUNT(*) n FROM unidades
UNION ALL SELECT 'usuarios',        COUNT(*) FROM usuarios
UNION ALL SELECT 'clientes',        COUNT(*) FROM clientes
UNION ALL SELECT 'produtos',        COUNT(*) FROM produtos
UNION ALL SELECT 'areas_atuacao',   COUNT(*) FROM areas_atuacao
UNION ALL SELECT 'app_banners',     COUNT(*) FROM app_banners
UNION ALL SELECT 'agendas',         COUNT(*) FROM agendas
UNION ALL SELECT 'cupons_clientes', COUNT(*) FROM cupons_clientes
UNION ALL SELECT 'sorteios_vendas', COUNT(*) FROM sorteios_vendas
UNION ALL SELECT 'indicacoes',      COUNT(*) FROM indicacoes;"
