#!/bin/bash
# Basé sur un travail de Cédric Abonnel / Cédrix sous licence CC BY-NC 4.0

# Importer les fonctions communes
source "$(dirname "$0")/../common/common_utils.sh"

# Vérifier si le script est exécuté en root
check_root

set -e

# Demande interactive si le rôle n’est pas passé en paramètre
if [[ -n "$1" ]]; then
  ROLE_NAME="$1"
else
  read -p "👤 Entrez le nom du rôle PostgreSQL à créer : " ROLE_NAME
fi

if [[ -z "$ROLE_NAME" ]]; then
  echo "❌ Le nom du rôle est obligatoire."
  exit 1
fi

# Demander le mot de passe de l'utilisateur 'postgres'
read -s -p "🔑 Entrez le mot de passe de l'utilisateur 'postgres' : " POSTGRES_PASSWORD
echo ""

# Générer le mot de passe du rôle
echo "🔐 Génération d'un mot de passe fort pour le rôle '$ROLE_NAME'..."
ROLE_PASSWORD=$(generate_token 20)

# Générer un fichier SQL temporaire pour la vérification + création
SQL_FILE=$(mktemp)

cat <<EOF > "$SQL_FILE"
DO \$\$
BEGIN
  IF NOT EXISTS (SELECT FROM pg_roles WHERE rolname = '${ROLE_NAME}') THEN
    RAISE NOTICE '🛠 Création du rôle "${ROLE_NAME}"...';
    CREATE ROLE ${ROLE_NAME} WITH LOGIN PASSWORD '${ROLE_PASSWORD}';
  ELSE
    RAISE NOTICE '⚠️ Le rôle "${ROLE_NAME}" existe déjà.';
  END IF;
END
\$\$;
EOF

chmod 644 "$SQL_FILE" 

# Une seule exécution de psql via sudo avec mot de passe PostgreSQL exporté
echo "🔎 Exécution des commandes SQL avec sudo..."
sudo -u postgres bash -c "PGPASSWORD='${POSTGRES_PASSWORD}' psql -v ON_ERROR_STOP=1 -f '${SQL_FILE}'"

rm -f "$SQL_FILE"

# Affichage des identifiants si création
echo ""
echo "-------------------------------------------"
echo " Nom du rôle : ${ROLE_NAME}"
echo " Mot de passe : ${ROLE_PASSWORD}"
echo "-------------------------------------------"

# Proposer d’enregistrer dans ~/.pgpass
read -p "💾 Voulez-vous enregistrer ces identifiants dans ~/.pgpass ? (y/n) " SAVE_PASS
if [[ "$SAVE_PASS" =~ ^[Yy]$ ]]; then
  PGPASS_FILE="${HOME}/.pgpass"
  echo "*:*:*:${ROLE_NAME}:${ROLE_PASSWORD}" >> "$PGPASS_FILE"
  chmod 600 "$PGPASS_FILE"
  echo "✅ Identifiants sauvegardés dans $PGPASS_FILE"
fi

echo "⚠️ Pensez à sauvegarder ces informations si vous ne les enregistrez pas."
echo "🎉 Opération terminée."
