#!/usr/bin/env bash
# Membuktikan data baru mengalir dari primary ke standby secara streaming.
# Skrip ini melanjutkan pasangan server dari siapkan-demo.sh:
# primary di port 54341, standby di port 54342, database toko.
set -eu

# Polling: tunggu sampai sebuah query mengembalikan nilai yang diharapkan.
tunggu() {  # port database sql nilai_yang_diharapkan
  local port="$1" db="$2" sql="$3" harapan="$4" i hasil
  for i in $(seq 1 80); do
    hasil=$(psql -X -q -t -A -h 127.0.0.1 -p "$port" -U postgres -d "$db" \
            -c "$sql" 2>/dev/null) || true
    if [ "$hasil" = "$harapan" ]; then return 0; fi
    sleep 0.2
  done
  echo "TIMEOUT: menunggu '$sql' menjadi $harapan (port $port)" >&2
  return 1
}

echo "== Tulis satu baris baru di primary =="
psql -X -h 127.0.0.1 -p 54341 -U postgres -d toko \
  -c "INSERT INTO produk VALUES (3, 'Gula Pasir', 12000);"

echo "== Baca dari standby: baris baru sudah tiba =="
tunggu 54342 toko "SELECT count(*) FROM produk;" "3"
psql -X -h 127.0.0.1 -p 54342 -U postgres -d toko \
  -c "SELECT id, nama, harga FROM produk ORDER BY id;"

echo "== Koneksi walsender yang terlihat dari primary =="
tunggu 54341 postgres \
  "SELECT state FROM pg_stat_replication WHERE application_name = 'standby_cabang';" \
  "streaming"
psql -X -h 127.0.0.1 -p 54341 -U postgres -d postgres \
  -c "SELECT application_name, client_addr, state, sync_state FROM pg_stat_replication;"
