#!/bin/sh
set -eu

base_url=${WORKCELL_BASE_URL:-https://workcell-137.pages.dev/downloads}
install_dir=${WORKCELL_INSTALL_DIR:-"$HOME/.local/bin"}
release_id=1b0ca9254c500a7cf2efdcf65b3aed91a6aed82c89c1f2c8de56b95d6586b462

if ! command -v curl >/dev/null 2>&1; then
  echo "workcell installer: curl is required" >&2
  exit 1
fi

os=$(uname -s | tr '[:upper:]' '[:lower:]')
case "$os" in
  darwin|linux) ;;
  *)
    echo "workcell installer: unsupported operating system: $os" >&2
    exit 1
    ;;
esac

machine=$(uname -m)
case "$machine" in
  arm64|aarch64) arch=arm64 ;;
  x86_64|amd64) arch=amd64 ;;
  *)
    echo "workcell installer: unsupported architecture: $machine" >&2
    exit 1
    ;;
esac

asset="workcell-$os-$arch"
temporary_dir=$(mktemp -d)
trap 'rm -rf "$temporary_dir"' EXIT HUP INT TERM

curl -fsSL "$base_url/$asset?release=$release_id" -o "$temporary_dir/workcell"
curl -fsSL "$base_url/SHA256SUMS?release=$release_id" -o "$temporary_dir/SHA256SUMS"

expected=$(awk -v asset="$asset" '$2 == asset { print $1 }' "$temporary_dir/SHA256SUMS")
if [ -z "$expected" ]; then
  echo "workcell installer: checksum missing for $asset" >&2
  exit 1
fi

if command -v shasum >/dev/null 2>&1; then
  actual=$(shasum -a 256 "$temporary_dir/workcell" | awk '{ print $1 }')
elif command -v sha256sum >/dev/null 2>&1; then
  actual=$(sha256sum "$temporary_dir/workcell" | awk '{ print $1 }')
else
  echo "workcell installer: shasum or sha256sum is required" >&2
  exit 1
fi

if [ "$actual" != "$expected" ]; then
  echo "workcell installer: checksum verification failed" >&2
  exit 1
fi

mkdir -p "$install_dir"
install -m 0755 "$temporary_dir/workcell" "$install_dir/workcell"

echo "installed workcell to $install_dir/workcell"
case ":$PATH:" in
  *":$install_dir:"*) ;;
  *) echo "add $install_dir to PATH to run workcell directly" ;;
esac
