#!/bin/sh
# Internal helper: locate a Node.js binary that can run peepshow's built ESM
# bundle (Node ≥ 22). Sourced by peepshow's bin wrappers. Sets $PEEPSHOW_NODE
# on success; exits 3 with a friendly error otherwise.

node_is_modern() {
  "$1" -e '
    const [maj] = process.versions.node.split(".").map(Number);
    process.exit(maj >= 22 ? 0 : 1);
  ' 2>/dev/null
}

find_usable_node() {
  if command -v node >/dev/null 2>&1 && node_is_modern "$(command -v node)"; then
    command -v node
    return 0
  fi
  if [ -s "${NVM_DIR:-$HOME/.nvm}/nvm.sh" ]; then
    # shellcheck disable=SC1091
    . "${NVM_DIR:-$HOME/.nvm}/nvm.sh"
    NVM_NODE="$(nvm which default 2>/dev/null || true)"
    if [ -n "$NVM_NODE" ] && node_is_modern "$NVM_NODE"; then
      echo "$NVM_NODE"
      return 0
    fi
  fi
  if [ -d "${HOME}/.nvm/versions/node" ]; then
    for v in $(ls "${HOME}/.nvm/versions/node" 2>/dev/null | sort -V -r); do
      CAND="${HOME}/.nvm/versions/node/${v}/bin/node"
      if [ -x "$CAND" ] && node_is_modern "$CAND"; then
        echo "$CAND"
        return 0
      fi
    done
  fi
  return 1
}

PEEPSHOW_NODE="$(find_usable_node)" || {
  echo "peepshow: Node 22+ required. Install via 'nvm install 22' or https://nodejs.org" >&2
  exit 3
}
export PEEPSHOW_NODE
