#!/bin/sh
# assay installer — self-hosted, no GitHub required.
#   curl -fsSL https://assay.qbcsys.com/install.sh | sh
# Env: ASSAY_BASE, ASSAY_HOME (~/.assay), ASSAY_BIN (~/.local/bin), ASSAY_NO_TUI=1
set -e
BASE="${ASSAY_BASE:-https://assay.qbcsys.com}"
HOME_DIR="${ASSAY_HOME:-$HOME/.assay}"
BIN_DIR="${ASSAY_BIN:-$HOME/.local/bin}"

command -v node >/dev/null 2>&1 || { echo "assay needs Node.js 18+ on PATH." >&2; exit 1; }
NODE_MAJOR=$(node -e 'process.stdout.write(String(process.versions.node.split(".")[0]))' 2>/dev/null || echo 0)
[ "$NODE_MAJOR" -ge 18 ] 2>/dev/null || { echo "assay needs Node 18+ (found $(node -v))." >&2; exit 1; }

echo "Installing assay -> $HOME_DIR"
mkdir -p "$HOME_DIR/bin" "$BIN_DIR"
for f in universal-agent.cjs providers.cjs validators.cjs; do
  curl -fsSL "$BASE/dl/$f" -o "$HOME_DIR/$f"
done
curl -fsSL "$BASE/dl/assay.cjs" -o "$HOME_DIR/bin/assay.cjs"
chmod +x "$HOME_DIR/bin/assay.cjs"
ln -sf "$HOME_DIR/bin/assay.cjs" "$BIN_DIR/assay"

# Rich terminal UI (Ink/React) — optional, needs npm. Core 'assay' works without it.
if [ "${ASSAY_NO_TUI:-}" != "1" ] && command -v npm >/dev/null 2>&1; then
  echo "Installing rich TUI (ink) -> $HOME_DIR/tui  (npm, ~20s)"
  mkdir -p "$HOME_DIR/tui"
  curl -fsSL "$BASE/dl/assay-tui.tar.gz" | tar -xzf - -C "$HOME_DIR/tui"
  chmod +x "$HOME_DIR/tui/src/cli.js"
  if (cd "$HOME_DIR/tui" && npm install --omit=dev --no-audit --no-fund >/dev/null 2>&1); then
    ln -sf "$HOME_DIR/tui/src/cli.js" "$BIN_DIR/assay-tui"
    TUI_OK=1
  else
    echo "  (TUI npm install failed — core 'assay' still works)"
  fi
fi

echo ""
echo "  assay installed."
case ":$PATH:" in
  *":$BIN_DIR:"*) : ;;
  *) echo "  Add to PATH:  export PATH=\"$BIN_DIR:\$PATH\"" ;;
esac
echo "  Run:  assay${TUI_OK:+   (rich UI:  assay-tui  or  assay --tui)}"
echo "  First run: pick a model. Provider keys are saved in ~/.assay/config.json with  /key <your-key>"
