#!/usr/bin/env bash
# Interactive agent selector — connects to VPS agents via TUI
# Usage: heyswain [agent-id]
#
# With no args, presents a menu then opens TUI.
# With agent name, opens TUI directly.
#
#   heyswain              → menu → TUI
#   heyswain swain        → TUI with Swain
#   heyswain cto          → TUI with CTO

set -euo pipefail

VPS="root@${SWAIN_VPS_HOST:-76.13.106.143}"

# Display names → VPS agent IDs
declare -A AGENT_IDS=(
  [swain]="main"
  [cto]="swain-cto"
)
declare -A AGENTS=(
  [swain]="Swain — Fleet lead (manages all agents)"
  [cto]="Swain CTO (swain dev)"
)
AGENT_ORDER=(swain cto)

pick_agent() {
  if command -v fzf &>/dev/null; then
    for id in "${AGENT_ORDER[@]}"; do
      printf "%s — %s\n" "$id" "${AGENTS[$id]}"
    done | fzf --prompt="agent> " --height=10 --reverse | cut -d' ' -f1
  else
    echo "Swain Agents" >&2
    echo "============" >&2
    for i in "${!AGENT_ORDER[@]}"; do
      printf "  %d) %-14s %s\n" $((i+1)) "${AGENT_ORDER[$i]}" "${AGENTS[${AGENT_ORDER[$i]}]}" >&2
    done
    echo "" >&2
    read -rp "Select (1-${#AGENT_ORDER[@]}): " choice
    if [[ ! "$choice" =~ ^[0-9]+$ ]] || (( choice < 1 || choice > ${#AGENT_ORDER[@]} )); then
      echo "Invalid selection" >&2
      exit 1
    fi
    echo "${AGENT_ORDER[$((choice-1))]}"
  fi
}

if [[ $# -ge 1 ]]; then
  AGENT="$1"
  if [[ -z "${AGENTS[$AGENT]+x}" ]]; then
    echo "Unknown agent: $AGENT"
    echo "Available: ${AGENT_ORDER[*]}"
    exit 1
  fi
else
  AGENT=$(pick_agent)
  [[ -z "$AGENT" ]] && exit 0
fi

VPS_ID="${AGENT_IDS[$AGENT]}"

echo "Connecting to $AGENT..."
ssh -t "$VPS" "openclaw tui --session agent:$VPS_ID:tui"