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

: "${PUBLIC_HOST:?PUBLIC_HOST is required}"
: "${PUBLIC_PORTS:?PUBLIC_PORTS is required}"

read -r -a ports <<<"$PUBLIC_PORTS"
for _ in $(seq 1 "${WAIT_ATTEMPTS:-180}"); do
  ready=1
  for port in "${ports[@]}"; do
    if ! timeout 3 bash -c "</dev/tcp/$PUBLIC_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." >&2
exit 1
