#!/usr/bin/env sh
set -e

# ─────────────────────────────────────────────
#  AgentGYM installer  ·  get.agentgym.tech
#  curl -sSL get.agentgym.tech | sh
# ─────────────────────────────────────────────

PACKAGE="agentgym"
MIN_NODE=18

# Colors (fallback to plain if no tty)
if [ -t 1 ]; then
  LIME='\033[38;2;197;247;79m'
  CYAN='\033[38;2;111;216;255m'
  AMBER='\033[38;2;255;181;71m'
  RED='\033[38;2;255;107;107m'
  DIM='\033[38;2;107;116;128m'
  RESET='\033[0m'
  BOLD='\033[1m'
else
  LIME='' CYAN='' AMBER='' RED='' DIM='' RESET='' BOLD=''
fi

print_banner() {
  printf "\n"
  printf "${LIME}  ▄▀█ █▀▀ █▀▀ █▄░█ ▀█▀ █▀▀ █▄█ █▀▄▀█${RESET}\n"
  printf "${CYAN}  █▀█ █▄█ ██▄ █░▀█ ░█░ █▄█ ░█░ █░▀░█${RESET}\n"
  printf "${DIM}  Train agents in environments that don't exist yet.${RESET}\n"
  printf "\n"
}

fail() {
  printf "${RED}✗  $1${RESET}\n" >&2
  exit 1
}

info() {
  printf "${DIM}   $1${RESET}\n"
}

ok() {
  printf "${LIME}✓  $1${RESET}\n"
}

print_banner

# ── 1. Check Node.js ──────────────────────────
if ! command -v node >/dev/null 2>&1; then
  printf "${AMBER}⚠  Node.js not found.${RESET}\n"
  printf "${DIM}   Install it from https://nodejs.org (≥ v${MIN_NODE} required)${RESET}\n"
  fail "Node.js is required to run AgentGYM."
fi

NODE_VERSION=$(node -e "process.stdout.write(process.versions.node.split('.')[0])")
if [ "$NODE_VERSION" -lt "$MIN_NODE" ] 2>/dev/null; then
  fail "Node.js v${MIN_NODE}+ required. You have v${NODE_VERSION}. Please upgrade: https://nodejs.org"
fi
ok "Node.js v$(node --version | tr -d 'v') detected"

# ── 2. Check npm ──────────────────────────────
if ! command -v npm >/dev/null 2>&1; then
  fail "npm not found. Install Node.js from https://nodejs.org"
fi
ok "npm $(npm --version) detected"

# ── 3. Install / upgrade ──────────────────────
printf "\n${BOLD}  Installing ${LIME}agentgym${RESET}${BOLD}...${RESET}\n\n"

if npm install -g "$PACKAGE" --loglevel=error 2>&1; then
  ok "Installed ${PACKAGE}"
else
  printf "${AMBER}  npm global install failed, trying with sudo...${RESET}\n"
  sudo npm install -g "$PACKAGE" --loglevel=error || fail "Installation failed. Try: sudo npm install -g ${PACKAGE}"
fi

# ── 4. Verify ─────────────────────────────────
if command -v agentgym >/dev/null 2>&1; then
  printf "\n${LIME}  ──────────────────────────────────────────${RESET}\n"
  printf "${LIME}  ✓ AgentGYM installed successfully!${RESET}\n"
  printf "${DIM}    Run:  ${RESET}${LIME}agentgym${RESET}\n"
  printf "${LIME}  ──────────────────────────────────────────${RESET}\n\n"
else
  printf "\n${AMBER}⚠  agentgym command not in PATH.${RESET}\n"
  NPM_BIN=$(npm bin -g 2>/dev/null || npm prefix -g)/bin
  printf "${DIM}   Add to your shell profile:${RESET}\n"
  printf "${CYAN}   export PATH=\"\$PATH:${NPM_BIN}\"${RESET}\n\n"
fi
