#!/usr/bin/env bash
set -euo pipefail
MODE="${1:-all}"
HTTP_URL="${TELOS_HTTP_URL:-http://38.49.214.109:8888}"
SHIP_HOST="${TELOS_SHIP_HOST:-38.49.214.109}"
SHIP_PORT="${TELOS_SHIP_PORT:-8080}"
RETH_RPC="${RETH_RPC:-http://127.0.0.1:8545}"
log() { printf '[%s] %s\n' "$(date -Is)" "$*"; }
wait_http() {
  until curl -fsS --max-time 5 -H 'content-type: application/json' --data '{}' "$HTTP_URL/v1/chain/get_info" >/dev/null; do
    log "waiting for TelosZero HTTP at $HTTP_URL"
    sleep 30
  done
}
wait_ship() {
  wait_http
  until timeout 5 bash -c "</dev/tcp/$SHIP_HOST/$SHIP_PORT" 2>/dev/null; do
    log "waiting for TelosZero SHIP at $SHIP_HOST:$SHIP_PORT"
    sleep 30
  done
}
wait_reth() {
  until curl -fsS --max-time 5 -H 'content-type: application/json' --data '{"jsonrpc":"2.0","id":1,"method":"eth_blockNumber","params":[]}' "$RETH_RPC" | jq -e '.result' >/dev/null; do
    log "waiting for local reth RPC at $RETH_RPC"
    sleep 15
  done
}
case "$MODE" in
  http) wait_http ;;
  ship) wait_ship ;;
  reth) wait_reth ;;
  all) wait_ship; wait_reth ;;
  *) echo "usage: $0 [http|ship|reth|all]" >&2; exit 2 ;;
esac
