#!/bin/sh
set -eu

BASE_URL="${NV_INSTALL_BASE_URL:-https://n-v.io/downloads/nvcli}"
VERSION="${NV_VERSION:-latest}"
OS=$(uname -s | tr '[:upper:]' '[:lower:]')
ARCH=$(uname -m)
case "$OS" in
  linux*) OS="linux" ;;
  darwin*) OS="darwin" ;;
  *) echo "Unsupported OS: $OS" >&2; exit 1 ;;
esac
case "$ARCH" in
  x86_64|amd64) ARCH="x64" ;;
  arm64|aarch64) ARCH="arm64" ;;
  *) echo "Unsupported architecture: $ARCH" >&2; exit 1 ;;
esac

ASSET="nv-${OS}-${ARCH}"
URL="$BASE_URL/$VERSION/$ASSET"
TMP=$(mktemp -d)
trap 'rm -rf "$TMP"' EXIT

echo "Installing Node Vertex CLI for $OS/$ARCH..."
if command -v curl >/dev/null 2>&1; then
  curl -fsSL "$URL" -o "$TMP/nv"
elif command -v wget >/dev/null 2>&1; then
  wget -q "$URL" -O "$TMP/nv"
else
  echo "curl or wget is required" >&2; exit 1
fi

if command -v curl >/dev/null 2>&1 && curl -fsSL "$URL.sha256" -o "$TMP/nv.sha256" 2>/dev/null; then
  EXPECTED=$(awk '{print $1}' "$TMP/nv.sha256")
  if command -v sha256sum >/dev/null 2>&1; then
    ACTUAL=$(sha256sum "$TMP/nv" | awk '{print $1}')
  elif command -v shasum >/dev/null 2>&1; then
    ACTUAL=$(shasum -a 256 "$TMP/nv" | awk '{print $1}')
  else
    ACTUAL="$EXPECTED"
  fi
  [ "$EXPECTED" = "$ACTUAL" ] || { echo "checksum verification failed" >&2; exit 1; }
fi

chmod +x "$TMP/nv"
if [ -w /usr/local/bin ] || [ "$(id -u)" = "0" ]; then
  DEST=/usr/local/bin/nv
  cp "$TMP/nv" "$DEST"
elif command -v sudo >/dev/null 2>&1 && sudo -n true 2>/dev/null; then
  DEST=/usr/local/bin/nv
  sudo cp "$TMP/nv" "$DEST"
else
  mkdir -p "$HOME/.local/bin"
  DEST="$HOME/.local/bin/nv"
  cp "$TMP/nv" "$DEST"
fi
chmod +x "$DEST"
VER=$($DEST --version 2>/dev/null || $DEST help 2>/dev/null | head -1 || echo nv)
echo "Installed $VER"
echo
echo "Next:"
echo "  nv enroll"
case ":$PATH:" in
  *":$(dirname "$DEST"):"*) ;;
  *) echo; echo "Note: add $(dirname "$DEST") to PATH if nv is not found." ;;
esac
