#!/usr/bin/env bash
# Initialize local PostgreSQL cluster + zpt database (idempotent-ish).
set -euo pipefail
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
PG_ROOT="$ROOT/.tools/pgsql-root"
PG_BIN="$PG_ROOT/usr/lib/postgresql/14/bin"
PG_DATA="$ROOT/.tools/pgdata"
PG_RUN="$ROOT/.tools/pg-run"
export LD_LIBRARY_PATH="$PG_ROOT/usr/lib/x86_64-linux-gnu:${LD_LIBRARY_PATH:-}"

DB_USER="${PGUSER:-zpt}"
DB_PASS="${PGPASSWORD:-zpt_dev_secret}"
DB_NAME="${PGDATABASE:-zpt}"
DB_PORT="${PGPORT:-5433}"

if [[ ! -x "$PG_BIN/initdb" ]]; then
  echo "PostgreSQL binaries missing under .tools/pgsql-root"
  echo "Extract postgresql-14 debs into .tools/pgsql-root first (see README)."
  exit 1
fi

mkdir -p "$PG_RUN"

if [[ ! -d "$PG_DATA" ]]; then
  "$PG_BIN/initdb" -D "$PG_DATA" -U "$DB_USER" --auth-local=trust --auth-host=scram-sha-256 \
    --pwfile=<(printf '%s\n' "$DB_PASS") --encoding=UTF8 --locale=C.UTF-8
  cat >> "$PG_DATA/postgresql.conf" <<EOF

listen_addresses = '127.0.0.1'
port = $DB_PORT
unix_socket_directories = '$PG_RUN'
EOF
  cat > "$PG_DATA/pg_hba.conf" <<'EOF'
local   all             all                                     trust
host    all             all             127.0.0.1/32            scram-sha-256
host    all             all             ::1/128                 scram-sha-256
EOF
fi

"$ROOT/scripts/pg-start.sh"

"$PG_BIN/psql" -h "$PG_RUN" -p "$DB_PORT" -U "$DB_USER" -d postgres -c \
  "ALTER USER \"$DB_USER\" WITH PASSWORD '$DB_PASS';" >/dev/null
"$PG_BIN/psql" -h "$PG_RUN" -p "$DB_PORT" -U "$DB_USER" -d postgres -tc \
  "SELECT 1 FROM pg_database WHERE datname='$DB_NAME'" | grep -q 1 || \
  "$PG_BIN/psql" -h "$PG_RUN" -p "$DB_PORT" -U "$DB_USER" -d postgres -c \
    "CREATE DATABASE \"$DB_NAME\" OWNER \"$DB_USER\";"

echo "Database ready: postgresql://$DB_USER:***@127.0.0.1:$DB_PORT/$DB_NAME"
echo "Credentials are in the repo root .env file."
