#!/usr/bin/env bash
set -Eeuo pipefail
CONFIG_DIR="${CHATGPT_ORCHESTRATOR_CONFIG_DIR:-$HOME/.config/chatgpt-orchestrator}"
PROFILE_DIR="${TUNNEL_CLIENT_PROFILE_DIR:-$HOME/.config/tunnel-client}"
PROFILE="${CHATGPT_ORCHESTRATOR_TUNNEL_PROFILE:-chatgpt-orchestrator}"
TUNNEL_CLIENT_BIN="${TUNNEL_CLIENT_BIN:-$HOME/.local/bin/tunnel-client}"
API_FILE="$CONFIG_DIR/tunnel-api-key"
AUTH_HEADER_FILE="$CONFIG_DIR/mcp-auth-header"
HEALTH_URL_FILE="${CHATGPT_ORCHESTRATOR_TUNNEL_HEALTH_URL_FILE:-$HOME/.local/state/chatgpt-orchestrator/tunnel-health.url}"

[[ -r "$API_FILE" ]] || { echo "Missing tunnel API key: $API_FILE" >&2; exit 1; }
[[ -r "$AUTH_HEADER_FILE" ]] || { echo "Missing MCP authorization header: $AUTH_HEADER_FILE" >&2; exit 1; }
mkdir -p "$(dirname "$HEALTH_URL_FILE")"

MCP_HEALTH_URL="${CHATGPT_ORCHESTRATOR_MCP_HEALTH_URL:-http://127.0.0.1:8764/healthz}"
MCP_STARTUP_TIMEOUT_SECONDS="${CHATGPT_ORCHESTRATOR_MCP_STARTUP_TIMEOUT_SECONDS:-30}"
deadline=$((SECONDS + MCP_STARTUP_TIMEOUT_SECONDS))
until curl --silent --show-error --fail --max-time 2 "$MCP_HEALTH_URL" >/dev/null 2>&1; do
  if (( SECONDS >= deadline )); then
    echo "Timed out waiting for ChatGPT Orchestrator MCP health at $MCP_HEALTH_URL" >&2
    exit 1
  fi
  sleep 1
done

export CONTROL_PLANE_API_KEY="$(cat "$API_FILE")"
exec "$TUNNEL_CLIENT_BIN" run \
  --profile "$PROFILE" \
  --profile-dir "$PROFILE_DIR" \
  --mcp.extra-headers "Authorization: file:$AUTH_HEADER_FILE" \
  --mcp.discovery-extra-headers "Authorization: file:$AUTH_HEADER_FILE" \
  --health.listen-addr '127.0.0.1:0' \
  --health.url-file "$HEALTH_URL_FILE"
