#!/bin/sh
set -eu

package_name="@raggle-ai/kennel-cli"
registry_url="https://npm.pkg.github.com"

say() {
  printf '%s\n' "$*"
}

fail() {
  printf 'kennel install: %s\n' "$*" >&2
  exit 1
}

command -v node >/dev/null 2>&1 || fail "Node.js 20 or newer is required."
command -v npm >/dev/null 2>&1 || fail "npm is required."

node_major="$(node -p 'Number(process.versions.node.split(".")[0])' 2>/dev/null || printf 0)"
if [ "$node_major" -lt 20 ]; then
  fail "Node.js 20 or newer is required. Found $(node --version)."
fi

token="\${KENNEL_GITHUB_TOKEN:-\${GITHUB_TOKEN:-\${GH_TOKEN:-\${NODE_AUTH_TOKEN:-}}}}"
if [ -z "$token" ] && command -v gh >/dev/null 2>&1; then
  token="$(gh auth token 2>/dev/null || true)"
fi

if [ -z "$token" ]; then
  fail "GitHub Packages auth token is required. Set KENNEL_GITHUB_TOKEN, GITHUB_TOKEN, GH_TOKEN, or NODE_AUTH_TOKEN, or sign in with gh auth login."
fi

npmrc="$(mktemp "\${TMPDIR:-/tmp}/kennel-npmrc.XXXXXX")"
cleanup() {
  rm -f "$npmrc"
}
trap cleanup EXIT INT TERM

{
  printf '@raggle-ai:registry=%s\n' "$registry_url"
  printf '//npm.pkg.github.com/:_authToken=%s\n' "$token"
  printf '//npm.pkg.github.com/:always-auth=true\n'
} > "$npmrc"

say "Installing $package_name from GitHub Packages..."
npm install --global "$package_name@latest" --userconfig "$npmrc"

command -v kennel >/dev/null 2>&1 || fail "kennel was installed, but it is not on PATH."
kennel --help >/dev/null
say "Kennel installed. Run: kennel --help"
