#!/usr/bin/env bash
# Membuat subscription di sisi cabang: initial copy lalu streaming perubahan.
# Skrip ini melanjutkan pasangan server dari publikasi.sh:
# publisher di port 54351 (database pusat), 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 "== Langkah 1: tabel harus sudah ada di subscriber sebelum berlangganan =="
psql -X -h 127.0.0.1 -p 54352 -U postgres -d cabang \
  -c "CREATE TABLE produk (id bigint GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, nama text NOT NULL, harga numeric);"

echo "== Langkah 2: buat subscription ke publication pub_produk =="
psql -X -h 127.0.0.1 -p 54352 -U postgres -d cabang 2>&1 \
  -c "CREATE SUBSCRIPTION sub_produk CONNECTION 'host=127.0.0.1 port=54351 user=postgres dbname=pusat' PUBLICATION pub_produk;"

echo "== Langkah 3: initial copy menyalin isi tabel ke cabang =="
tunggu 54352 cabang "SELECT count(*) FROM produk;" "3"
psql -X -h 127.0.0.1 -p 54352 -U postgres -d cabang \
  -c "SELECT id, nama, harga FROM produk ORDER BY id;"

echo "== Langkah 4: katalog subscription di cabang =="
psql -X -h 127.0.0.1 -p 54352 -U postgres -d cabang \
  -c "SELECT subname, subenabled, subslotname, subpublications FROM pg_subscription;"

echo "== Langkah 5: koneksi yang terlihat dari publisher =="
tunggu 54351 pusat "SELECT count(*) FROM pg_stat_replication;" "1"
psql -X -h 127.0.0.1 -p 54351 -U postgres -d pusat \
  -c "SELECT application_name, state, sync_state FROM pg_stat_replication;"

echo "== Langkah 6: subscriber tetap server biasa — bisa ditulis =="
echo "tabel catatan_penerimaan tidak ikut dipublikasikan, murni milik cabang:"
psql -X -h 127.0.0.1 -p 54352 -U postgres -d cabang \
  -c "CREATE TABLE catatan_penerimaan (id int PRIMARY KEY, catatan text);" \
  -c "INSERT INTO catatan_penerimaan VALUES (1, 'initial copy produk selesai');" \
  -c "SELECT id, catatan FROM catatan_penerimaan ORDER BY id;"
