#!/usr/bin/env sh
set -eu

VERSION="${RMUX_VERSION:-v0.2.0}"
REPOSITORY="${RMUX_REPOSITORY:-Helvesec/rmux}"
INSTALL_DIR="${RMUX_INSTALL_DIR:-${INSTALL_DIR:-"$HOME/.local/bin"}}"
BASE_URL="${RMUX_BASE_URL:-https://github.com/$REPOSITORY/releases/download/$VERSION}"

fail() {
  printf 'rmux install: %s\n' "$*" >&2
  exit 1
}

download() {
  url="$1"
  out="$2"
  if command -v curl >/dev/null 2>&1; then
    curl -fsSL "$url" -o "$out"
  elif command -v wget >/dev/null 2>&1; then
    wget -q "$url" -O "$out"
  else
    fail "curl or wget is required"
  fi
}

case "$(uname -s)" in
  Linux) os="linux" ;;
  Darwin) os="darwin" ;;
  *) fail "unsupported OS: $(uname -s)" ;;
esac

case "$(uname -m)" in
  x86_64|amd64) arch="x86_64" ;;
  arm64|aarch64) arch="aarch64" ;;
  *) fail "unsupported CPU architecture: $(uname -m)" ;;
esac

case "$os-$arch" in
  linux-x86_64) target="x86_64-unknown-linux-gnu" ;;
  darwin-x86_64) target="x86_64-apple-darwin" ;;
  darwin-aarch64) target="aarch64-apple-darwin" ;;
  linux-aarch64) fail "Linux ARM64 prebuilt binary is not available for $VERSION. Use: cargo install rmux --locked" ;;
  *) fail "unsupported target: $os-$arch" ;;
esac

command -v tar >/dev/null 2>&1 || fail "tar is required"

archive="rmux-$VERSION-$target.tar.gz"
tmp="${TMPDIR:-/tmp}/rmux-install-$$"
mkdir -p "$tmp" || fail "cannot create temp directory"
trap 'rm -rf "$tmp"' EXIT INT TERM

cd "$tmp"
download "$BASE_URL/SHA256SUMS" "SHA256SUMS"
download "$BASE_URL/$archive" "$archive"

grep "  $archive\$" SHA256SUMS > SHA256SUMS.current || fail "checksum entry not found for $archive"
if command -v sha256sum >/dev/null 2>&1; then
  sha256sum -c SHA256SUMS.current >/dev/null
elif command -v shasum >/dev/null 2>&1; then
  shasum -a 256 -c SHA256SUMS.current >/dev/null
else
  fail "sha256sum or shasum is required"
fi

tar -xzf "$archive"
binary="$tmp/rmux-$VERSION-$target/rmux"
[ -x "$binary" ] || fail "rmux binary not found in archive"

mkdir -p "$INSTALL_DIR" || fail "cannot create install directory: $INSTALL_DIR"
cp "$binary" "$INSTALL_DIR/rmux" || fail "cannot install to $INSTALL_DIR/rmux"
chmod 755 "$INSTALL_DIR/rmux"

if [ "$os" = "darwin" ] && command -v codesign >/dev/null 2>&1; then
  codesign --force --sign - "$INSTALL_DIR/rmux" >/dev/null || fail "cannot codesign $INSTALL_DIR/rmux"
fi

installed="$("$INSTALL_DIR/rmux" -V)"
printf 'Installed %s to %s\n' "$installed" "$INSTALL_DIR/rmux"

case ":$PATH:" in
  *":$INSTALL_DIR:"*) ;;
  *) printf 'Add %s to PATH if rmux is not found by your shell.\n' "$INSTALL_DIR" ;;
esac
