#!/bin/sh
# spwn installer — https://spwn.stream
# Usage: curl -fsSL https://spwn.stream/install.sh | sh
set -eu

SERVER="https://spwn.stream"
[ -t 1 ] || quiet=1

say() { printf '%s\n' "$*" >&2; }

OS="$(uname -s)"
ARCH="$(uname -m)"
case "$OS" in
  Linux) os=linux ;;
  Darwin) os=darwin ;;
  *) say "spwn: unsupported OS '$OS' — grab a binary from $SERVER/dist manually"; exit 1 ;;
esac
case "$ARCH" in
  x86_64|amd64) arch=amd64 ;;
  aarch64|arm64) arch=arm64 ;;
  armv7l|armv6l) arch=arm ;;
  i686|i386) arch=386 ;;
  *) say "spwn: unsupported arch '$ARCH'"; exit 1 ;;
esac

URL="$SERVER/dist/$os/$arch/spwn"
say "spwn: downloading $URL"

TMP="$(mktemp)"
trap 'rm -f "$TMP"' EXIT
if command -v curl >/dev/null 2>&1; then
  curl -fsSL "$URL" -o "$TMP"
elif command -v wget >/dev/null 2>&1; then
  wget -qO "$TMP" "$URL"
else
  say "spwn: need curl or wget to install"; exit 1
fi
chmod +x "$TMP"

# Prefer a PATH dir we can write without sudo.
BIN_DIR=""
for d in "${SPWN_INSTALL_DIR:-}" "$HOME/.local/bin" /usr/local/bin /usr/bin; do
  [ -n "$d" ] || continue
  if [ -w "$d" ] || ([ ! -e "$d" ] && [ -w "$(dirname "$d")" ] && mkdir -p "$d" 2>/dev/null); then
    BIN_DIR="$d"; break
  fi
done
if [ -z "$BIN_DIR" ]; then
  say "spwn: no writable bin dir found; saving to ./spwn"
  BIN_DIR="."
fi
mv "$TMP" "$BIN_DIR/spwn"
chmod +x "$BIN_DIR/spwn"
trap - EXIT

if ! echo "$PATH" | tr ':' '\n' | grep -qx "$BIN_DIR"; then
  say "spwn: note: $BIN_DIR is not in your PATH (add it to use 'spwn' directly)"
fi

"$BIN_DIR/spwn" version >&2 2>/dev/null || true
say "spwn: installed ✓  pipe something:  long-command | spwn"
