#!/usr/bin/env bash
# runner_bootstrap.sh — task-2566 self-hosted runner environment validation
# Exit 0 = PASS (all dependencies satisfied), exit 1 = FAIL (≥1 missing/broken)
# Used by runner systemd ExecStartPre + workflow runner-health.yml
set -u

FAIL=0
PASS_ITEMS=()
FAIL_ITEMS=()

_check() {
  local name="$1" cmd="$2" min_version_check="${3:-}"
  if eval "$cmd" >/dev/null 2>&1; then
    if [[ -n "$min_version_check" ]] && ! eval "$min_version_check" >/dev/null 2>&1; then
      FAIL_ITEMS+=("$name (version check failed)")
      FAIL=1
    else
      PASS_ITEMS+=("$name")
    fi
  else
    FAIL_ITEMS+=("$name (missing or broken)")
    FAIL=1
  fi
}

# 1. BOT_GITHUB_TOKEN env (presence only, NEVER print value)
if [[ -n "${BOT_GITHUB_TOKEN:-}" ]]; then
  PASS_ITEMS+=("BOT_GITHUB_TOKEN env (length=${#BOT_GITHUB_TOKEN})")
else
  # Try loading from .env.keys
  if [[ -f /home/jay/workspace/.env.keys ]]; then
    set -a
    # shellcheck disable=SC1091
    source /home/jay/workspace/.env.keys
    set +a
    if [[ -n "${BOT_GITHUB_TOKEN:-}" ]]; then
      PASS_ITEMS+=("BOT_GITHUB_TOKEN loaded from .env.keys (length=${#BOT_GITHUB_TOKEN})")
    else
      FAIL_ITEMS+=("BOT_GITHUB_TOKEN missing in env and .env.keys")
      FAIL=1
    fi
  else
    FAIL_ITEMS+=("BOT_GITHUB_TOKEN env missing and .env.keys not found")
    FAIL=1
  fi
fi

# 2. gh CLI auth (use whichever auth is configured — gh checks default)
_check "gh CLI" "gh --version" "gh auth status"

# 3. python3 ≥ 3.10
_check "python3" "python3 --version" "python3 -c 'import sys; assert sys.version_info >= (3, 10)'"

# 4. pytest
_check "pytest" "python3 -m pytest --version" ""

# 5. node ≥ 18
_check "node" "node --version" "node -e 'process.exit(parseInt(process.version.slice(1).split(\".\")[0]) >= 18 ? 0 : 1)'"

# 6. git
_check "git" "git --version" ""

# 7. curl
_check "curl" "curl --version" ""

# 8. jq
_check "jq" "jq --version" ""

echo "=== runner_bootstrap.sh (task-2566) ==="
for item in "${PASS_ITEMS[@]}"; do echo "  PASS: $item"; done
for item in "${FAIL_ITEMS[@]}"; do echo "  FAIL: $item"; done
echo "=== Summary: ${#PASS_ITEMS[@]} PASS / ${#FAIL_ITEMS[@]} FAIL ==="

if [[ $FAIL -ne 0 ]]; then
  echo "BOOTSTRAP FAILED — runner should not start"
  exit 1
fi

echo "BOOTSTRAP OK"
exit 0
