#!/usr/bin/env bash
set -euo pipefail

script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
module_dir="${TF_MODULE_DIR:-$(cd "$script_dir/.." && pwd)}"
endpoints="$(terraform -chdir="$module_dir" output -json public_endpoints)"

host="$(jq -r '.public_ip' <<<"$endpoints")"
mapfile -t ports < <(jq -r '[.mysql.port, .kafka_anonymous.port, .kafka_sasl_plain.port, .pulsar_binary.port, .pulsar_admin_http.port] | .[]' <<<"$endpoints")

for attempt in $(seq 1 120); do
  ready=1
  for port in "${ports[@]}"; do
    if ! timeout 3 bash -c "</dev/tcp/$host/$port" 2>/dev/null; then
      ready=0
      break
    fi
  done
  if ((ready)); then
    echo "All public service ports are reachable."
    exit 0
  fi
  sleep 5
done

echo "Timed out waiting for public services after instance wake." >&2
exit 1
