#!/bin/bash
set -euo pipefail

NODE_VERSION="24.18.0"
case "$(uname -m)" in
  arm64) DIST="darwin-arm64"; SHA="4477b9f78efb77744cf5eb57a0e9594dba66466b38b4e93fa9f35cb907a095a6" ;;
  x86_64) DIST="darwin-x64"; SHA="4a3b6bc81542154430825128d9a279e8b364e8d90581544e506ef7579fd1ab6f" ;;
  *) echo "R4V3N: unsupported macOS architecture: $(uname -m)" >&2; exit 126 ;;
esac

CACHE_ROOT="${RAVEN_NODE_CACHE:-$HOME/Library/Application Support/Raven/node-runtime}"
NODE_DIR="$CACHE_ROOT/v$NODE_VERSION/$DIST"
NODE_BIN="$NODE_DIR/bin/node"

if [[ ! -x "$NODE_BIN" ]]; then
  echo "R4V3N: downloading Node.js v$NODE_VERSION ($DIST) — one-time setup..." >&2
  ARCHIVE="node-v$NODE_VERSION-$DIST.tar.xz"
  URL="https://nodejs.org/dist/v$NODE_VERSION/$ARCHIVE"
  TMP="$(mktemp -d "${TMPDIR:-/tmp}/raven-node.XXXXXX")"
  trap 'rm -rf "$TMP"' EXIT
  if ! curl -fsSL --retry 3 -o "$TMP/$ARCHIVE" "$URL"; then
    echo "R4V3N: could not download $URL — check your internet connection." >&2
    exit 1
  fi
  ACTUAL="$(shasum -a 256 "$TMP/$ARCHIVE" | awk '{print $1}')"
  if [[ "$ACTUAL" != "$SHA" ]]; then
    echo "R4V3N: checksum mismatch for $ARCHIVE (got $ACTUAL)" >&2
    exit 1
  fi
  mkdir -p "$TMP/extract"
  tar -xJf "$TMP/$ARCHIVE" -C "$TMP/extract" --strip-components=1
  mkdir -p "$(dirname "$NODE_DIR")"
  if ! mv "$TMP/extract" "$NODE_DIR" 2>/dev/null; then
    # A concurrent launch may have installed it first — use that copy.
    if [[ ! -x "$NODE_BIN" ]]; then
      echo "R4V3N: Node.js runtime install failed." >&2
      exit 1
    fi
  fi
  echo "R4V3N: Node.js runtime ready." >&2
fi

exec "$NODE_BIN" "$@"
