#!/bin/sh
#
# Cria os papéis de acesso ao PostgreSQL a partir de postgres/papeis.sql.modelo
# (F1.9).
#
#   SENHA_APP='...' sh scripts/criar-papeis.sh
#
# Sem a variável, o roteiro para. É deliberado: um papel com a senha literal
# "__SENHA_APP__" é pior que papel nenhum, porque parece configurado.
#
# HAVIA UM SEGUNDO PAPEL AQUI, `bvip_bi`, para o Power BI. Saiu em 09/09/2026
# junto com o Power BI inteiro -- ver o D9.
#
# POR QUE AS SENHAS NÃO ESTÃO NO ARQUIVO. `postgres/papeis.sql.modelo` é
# versionado; senha em repositório é senha vazada, e este projeto já tem seis
# credenciais em claro esperando remediação (D1).
#
# POR QUE NÃO HÁ `sed` AQUI. A primeira versão substituía os marcadores com
# `sed`, e isso estava errado de três maneiras — duas delas SILENCIOSAS:
#
#     senha 'a/b'   sed: unknown option to `s'      (falha alto)
#     senha 'a&b'   vira  a__SENHA__b               (o & é a correspondência)
#     senha 'a\b'   vira  ab                        (a barra some)
#
# Nos dois últimos casos o roteiro dizia "papéis criados" e o papel ficava com
# uma senha diferente da que foi digitada. Como senha boa costuma ter
# justamente esses caracteres, o defeito atingiria exatamente quem faz certo.
#
# A substituição passa a ser do próprio psql: `:'variavel'` produz um literal
# SQL corretamente escapado, sem nenhuma camada de texto no caminho.
#
# IDEMPOTENTE: rodar de novo só reafirma senha e permissões.
set -e

PROJETO="${PROJETO:-franquiabv}"
BANCO_PG="${BANCO_PG:-franquiabv_dev}"
USUARIO_PG="${USUARIO_PG:-franquiabv}"

if [ -z "$SENHA_APP" ]; then
    echo "ABORTADO: defina SENHA_APP." >&2
    echo >&2
    echo "  SENHA_APP='...' sh scripts/criar-papeis.sh" >&2
    echo >&2
    echo "Sem ela o papel nasceria com a senha literal do marcador, que" >&2
    echo "parece configuração e não é." >&2
    exit 1
fi

docker compose -p "$PROJETO" exec -T postgres \
    psql -U "$USUARIO_PG" -d "$BANCO_PG" -v ON_ERROR_STOP=1 -q \
         -v banco="$BANCO_PG" \
         -v senha_app="$SENHA_APP" \
    < postgres/papeis.sql.modelo

echo "   papel bvip_app criado/atualizado"
echo
echo "Confira com: SENHA_APP=... sh scripts/conferir-papeis.sh"
