#!/bin/sh
#
# Anonimiza a base carregada no MySQL do ambiente Docker.
#
# Uso:
#     sh scripts/anonimizar.sh [nome_do_banco]
#
# A senha aplicada a todos os colaboradores pode ser trocada com:
#     SENHA_DEV=outrasenha sh scripts/anonimizar.sh
#
set -e

# A RAIZ E O MODELO podem vir de quem chama: o exportador do teste público
# (scripts/exportar-base-teste.sh) roda uma cópia deste script e do modelo,
# tiradas no começo -- lidos da árvore, um checkout no meio de uma exportação de
# uma hora anonimizava com o modelo de outro código (quinta revisão do deploy).
cd "${ANONIMIZAR_RAIZ:-$(dirname "$0")/..}"
MODELO="${ANONIMIZAR_MODELO:-scripts/anonimizar.sql.modelo}"
# Sem o modelo, o sed falharia e o mysql receberia nada -- com saída zero.
[ -s "$MODELO" ] || { echo "ABORTADO: o modelo $MODELO não existe ou está vazio."; exit 1; }

BANCO="${1:-${DB_NAME:-franquiabv_dev}}"
SENHA_DEV="${SENHA_DEV:-dev123456}"

# --------------------------------------------------------------------------
# Trava de segurança. Este script reescreve o cadastro de clientes e não tem
# desfazer; apontá-lo para produção destruiria a base.
# --------------------------------------------------------------------------
case "$BANCO" in
    *produc*|*prod)
        echo "ABORTADO: o banco '$BANCO' tem nome de produção."
        echo "Este script destrói dados. Rode apenas em desenvolvimento ou homologação."
        exit 1
        ;;
esac

if ! docker compose ps --status running --services 2>/dev/null | grep -q '^mysql$'; then
    echo "ABORTADO: o serviço mysql não está no ar. Rode antes: docker compose up -d"
    exit 1
fi

echo "Banco de destino: $BANCO"
echo "Este script REESCREVE dados pessoais de forma irreversível."
printf "Confirma? (digite: sim) "
read -r RESPOSTA
[ "$RESPOSTA" = "sim" ] || { echo "Cancelado."; exit 1; }

echo "==> Gerando hash bcrypt da senha de desenvolvimento"
HASH=$(docker compose exec -T -e SENHA="$SENHA_DEV" app \
    php -r 'echo password_hash(getenv("SENHA"), PASSWORD_BCRYPT);')

case "$HASH" in
    \$2y\$*) ;;
    *) echo "ABORTADO: não foi possível gerar o hash da senha."; exit 1 ;;
esac

echo "==> Aplicando anonimização"
sed "s|__HASH_SENHA_DEV__|$HASH|" "$MODELO" \
    | docker compose exec -T mysql mysql -uroot -proot --default-character-set=utf8mb4 "$BANCO"

echo "==> Conferência (amostra)"
docker compose exec -T mysql mysql -uroot -proot --table "$BANCO" <<'SQL'
SELECT id, nome, telefone, email FROM clientes ORDER BY id LIMIT 3;
SELECT id, nome, login, email FROM usuarios ORDER BY id LIMIT 3;
SELECT
    (SELECT COUNT(*) FROM clientes WHERE email NOT LIKE '%@exemplo.invalid') AS clientes_com_email_real,
    (SELECT COUNT(*) FROM usuarios WHERE email NOT LIKE '%@exemplo.invalid') AS usuarios_com_email_real,
    (SELECT COUNT(*) FROM unidades WHERE whatsapp_api_key IS NOT NULL)       AS chaves_whatsapp_restantes,
    (SELECT COUNT(*) FROM clientes
        WHERE COALESCE(tags, '') <> LOWER(CONCAT_WS(' ', nome, telefone_sem_mascara, email))) AS tags_com_dado_real,
    (SELECT COUNT(*) FROM pontuacoes_historicos
        WHERE (descricao LIKE 'Somou mais 10 ponto(s), indica%' AND descricao NOT LIKE '% de um cliente')
           OR (descricao LIKE '%realizado pelo colaborador%'
               AND descricao NOT REGEXP 'realizado pelo colaborador [0-9]+ - Colaborador [0-9]+$'))
      + (SELECT COUNT(*) FROM produtos_estoque WHERE cancelamento_motivo LIKE '% cancelou em %'
            AND cancelamento_motivo NOT LIKE 'Um colaborador cancelou em %') AS nomes_em_texto;
SQL

cat <<FIM

Anonimização concluída.

Todos os colaboradores agora entram com:
    login: user<id>   (ex.: user1)
    senha: $SENHA_DEV

Os cinco contadores acima devem estar zerados. Se algum não estiver, há dado real
remanescente — não use este dump e investigue antes. Os dois últimos (as tags da
busca e os nomes que o sistema escreve em texto) só zeram desde 25/09/2026:
antes, a anonimização deixava ali o nome, o telefone e o e-mail reais.
FIM
