#!/usr/bin/env bash
# INSERT, UPDATE, dan DELETE di pusat mengalir ke cabang lewat subscription.
# Skrip ini melanjutkan pasangan server dari publikasi.sh + langganan.sh:
# publisher di port 54351, subscriber di port 54352.
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 "== INSERT di pusat =="
psql -X -h 127.0.0.1 -p 54351 -U postgres -d pusat \
  -c "INSERT INTO produk (nama, harga) VALUES ('Susu Kental', 9000);"
tunggu 54352 cabang "SELECT count(*) FROM produk;" "4"
echo "tiba di cabang"

echo "== UPDATE di pusat =="
psql -X -h 127.0.0.1 -p 54351 -U postgres -d pusat \
  -c "UPDATE produk SET harga = 8500 WHERE nama = 'Teh Celup';"
tunggu 54352 cabang "SELECT harga FROM produk WHERE nama = 'Teh Celup';" "8500"
echo "terlihat di cabang"

echo "== DELETE di pusat =="
psql -X -h 127.0.0.1 -p 54351 -U postgres -d pusat \
  -c "DELETE FROM produk WHERE nama = 'Kopi Tubruk';"
tunggu 54352 cabang "SELECT count(*) FROM produk;" "3"
echo "hilang di cabang"

echo "== Keadaan akhir tabel yang sama di cabang =="
psql -X -h 127.0.0.1 -p 54352 -U postgres -d cabang \
  -c "SELECT id, nama, harga FROM produk ORDER BY id;"
