#!/usr/bin/env bash
# ============================================================================
#  Agora Router — one-shot setup for OpenAI-compatible coding agents (macOS / Linux)
#
#  What it does (idempotent, backs up before it writes, never deletes):
#    1. exports OPENAI_BASE_URL + OPENAI_API_KEY into your shell profile
#    2. writes a Continue provider block        (~/.continue/config.yaml)
#    3. writes an Aider model config            (~/.aider.conf.yml + ~/.env)
#    4. prints the manual clicks for Cline / Cursor (GUI-only)
#
#  Usage:
#    export AGORA_KEY=agk_live_YOUR_KEY        # your key from agora-keys.legate.bot
#    bash agora-router-setup.sh
#
#  You never pick a model: send model "auto" and the Router decides per request.
# ============================================================================
set -euo pipefail

AGORA_BASE="${AGORA_BASE:-https://agora-mcp.legate.bot/v1}"
AGORA_KEY="${AGORA_KEY:-}"
MODEL="auto"

c_g(){ printf '\033[32m%s\033[0m\n' "$*"; }
c_y(){ printf '\033[33m%s\033[0m\n' "$*"; }
c_b(){ printf '\033[1m%s\033[0m\n'  "$*"; }

if [[ -z "$AGORA_KEY" ]]; then
  c_y "Set your key first:  export AGORA_KEY=agk_live_YOUR_KEY"
  c_y "Get one (self-service) at  https://agora-keys.legate.bot  — needs scope route.complete + a budget."
  exit 1
fi

stamp="$(date +%Y%m%d-%H%M%S)"
backup(){ [[ -f "$1" ]] && cp "$1" "$1.agora-bak-$stamp" && c_y "  backed up $1 → $1.agora-bak-$stamp" || true; }

c_b "Agora Router setup"
echo "  endpoint : $AGORA_BASE"
echo "  model    : $MODEL  (the Router chooses the real model per request)"
echo

# --- 1. shell profile env vars ----------------------------------------------
profile="$HOME/.zshrc"; [[ "${SHELL:-}" == *bash* ]] && profile="$HOME/.bashrc"
touch "$profile"
if ! grep -q 'AGORA ROUTER' "$profile" 2>/dev/null; then
  backup "$profile"
  {
    echo ""
    echo "# --- AGORA ROUTER (OpenAI-compatible gateway) ---"
    echo "export OPENAI_BASE_URL=\"$AGORA_BASE\""
    echo "export OPENAI_API_BASE=\"$AGORA_BASE\"   # some tools read this name"
    echo "export OPENAI_API_KEY=\"$AGORA_KEY\""
  } >> "$profile"
  c_g "✓ env vars added to $profile  (run: source $profile)"
else
  c_y "• $profile already has an AGORA ROUTER block — left untouched"
fi

# --- 2. Continue (VS Code / JetBrains) --------------------------------------
cont_dir="$HOME/.continue"; cont="$cont_dir/config.yaml"
mkdir -p "$cont_dir"; backup "$cont"
cat > "$cont_dir/agora.yaml" <<YAML
# Agora Router provider for Continue — import or merge into config.yaml
models:
  - name: AgoraRouter (auto)
    provider: openai
    model: $MODEL
    apiBase: $AGORA_BASE
    apiKey: $AGORA_KEY
    roles: [chat, edit, apply]
YAML
c_g "✓ Continue provider written → $cont_dir/agora.yaml  (merge its 'models:' into $cont)"

# --- 3. Aider ----------------------------------------------------------------
backup "$HOME/.aider.conf.yml"
cat > "$HOME/.aider.conf.yml" <<YAML
# Aider → Agora Router
openai-api-base: $AGORA_BASE
model: openai/$MODEL
YAML
touch "$HOME/.env"; backup "$HOME/.env"
grep -q 'OPENAI_API_KEY' "$HOME/.env" 2>/dev/null || echo "OPENAI_API_KEY=$AGORA_KEY" >> "$HOME/.env"
c_g "✓ Aider configured → ~/.aider.conf.yml  (run:  aider --model openai/$MODEL)"

# --- 4. GUI agents (manual) --------------------------------------------------
echo
c_b "Cline / Roo Code (VS Code) — GUI, set once:"
echo "  API Provider : OpenAI Compatible"
echo "  Base URL     : $AGORA_BASE"
echo "  API Key      : $AGORA_KEY"
echo "  Model ID     : $MODEL"
echo
c_b "Cursor — Settings → Models → OpenAI API Key → 'Override OpenAI Base URL':"
echo "  Base URL : $AGORA_BASE"
echo "  Key      : $AGORA_KEY     (add a custom model named  auto)"
echo
c_g "Done. Smoke test:"
echo "  curl $AGORA_BASE/models -H \"Authorization: Bearer \$OPENAI_API_KEY\""
