#!/bin/sh
set -eu

VERSION="1.1.0"
ARCHIVE_URL="https://rpc-relay.pages.dev/rpc-relay-pro-${VERSION}.tar.gz"
ARCHIVE_SHA256="37481c7270cf61c063feb5305b5e7f56933473f26581fabaddc1e80dbecdc820"
INSTALL_ROOT="${RPC_RELAY_INSTALL_ROOT:-${HOME}/.local/lib/rpc-relay-pro}"
BIN_ROOT="${RPC_RELAY_BIN_ROOT:-${HOME}/.local/bin}"
VERSION_DIR="${INSTALL_ROOT}/${VERSION}"
TEMP_DIR="$(mktemp -d)"

cleanup() { rm -rf "${TEMP_DIR}"; }
trap cleanup EXIT INT TERM

command -v node >/dev/null 2>&1 || { echo "Node.js 22 or newer is required." >&2; exit 1; }
command -v curl >/dev/null 2>&1 || { echo "curl is required." >&2; exit 1; }
command -v tar >/dev/null 2>&1 || { echo "tar is required." >&2; exit 1; }

NODE_MAJOR="$(node -p 'process.versions.node.split(".")[0]')"
[ "${NODE_MAJOR}" -ge 22 ] || { echo "Node.js 22 or newer is required; found $(node --version)." >&2; exit 1; }

echo "Installing RPC Relay Pro ${VERSION}..."
curl -fsSL "${ARCHIVE_URL}" -o "${TEMP_DIR}/source.tar.gz"
if command -v shasum >/dev/null 2>&1; then
  ACTUAL_SHA256="$(shasum -a 256 "${TEMP_DIR}/source.tar.gz" | awk '{print $1}')"
elif command -v sha256sum >/dev/null 2>&1; then
  ACTUAL_SHA256="$(sha256sum "${TEMP_DIR}/source.tar.gz" | awk '{print $1}')"
else
  echo "shasum or sha256sum is required to verify the download." >&2
  exit 1
fi
[ "${ACTUAL_SHA256}" = "${ARCHIVE_SHA256}" ] || { echo "Download checksum verification failed." >&2; exit 1; }
tar -xzf "${TEMP_DIR}/source.tar.gz" -C "${TEMP_DIR}"
PACKAGE_DIR="$(find "${TEMP_DIR}" -type d -name 'rpc-relay-pro' -print -quit)"
[ -n "${PACKAGE_DIR}" ] || { echo "Package was not found in the signed source archive." >&2; exit 1; }

mkdir -p "${VERSION_DIR}" "${BIN_ROOT}"
cp -R "${PACKAGE_DIR}/." "${VERSION_DIR}/"
chmod 755 "${VERSION_DIR}/bin/cli.mjs"
ln -sfn "${VERSION_DIR}/bin/cli.mjs" "${BIN_ROOT}/rpc-relay-pro"

echo "Installed ${BIN_ROOT}/rpc-relay-pro"
case ":${PATH}:" in
  *":${BIN_ROOT}:"*) ;;
  *) echo "Add ${BIN_ROOT} to PATH, then run: rpc-relay-pro setup" ;;
esac
echo "Next: rpc-relay-pro setup"
