#!/bin/sh
set -eu

base_url=${ZERO_INSTALL_BASE_URL:-https://sandbox.0-uk.com/downloads}
wheel_name="zero_client-0.1.0+ge93582af3c07-py3-none-any.whl"
expected_sha256="da7adca53f5ddf9d2e7cc78c8d8f9f42c8531adbd3c9ae5e2dfce191b567f297"
python_bin=${PYTHON:-}

if [ -z "$python_bin" ]; then
  python_bin=$(command -v python3 || true)
fi
if [ -z "$python_bin" ]; then
  printf '%s\n' "Zero requires Python 3.12 or newer." >&2
  exit 1
fi

temporary_dir=$(mktemp -d "${TMPDIR:-/tmp}/zero-client.XXXXXX")
cleanup() {
  rm -rf -- "$temporary_dir"
}
trap cleanup EXIT HUP INT TERM
wheel_path="$temporary_dir/$wheel_name"

if command -v curl >/dev/null 2>&1; then
  curl --fail --silent --show-error --location \
    "$base_url/$wheel_name" --output "$wheel_path"
else
  "$python_bin" -c \
    'import sys, urllib.request; urllib.request.urlretrieve(sys.argv[1], sys.argv[2])' \
    "$base_url/$wheel_name" "$wheel_path"
fi

actual_sha256=$($python_bin -c \
  'import hashlib, pathlib, sys; print(hashlib.sha256(pathlib.Path(sys.argv[1]).read_bytes()).hexdigest())' \
  "$wheel_path")
if [ "$actual_sha256" != "$expected_sha256" ]; then
  printf '%s\n' "Zero client checksum verification failed." >&2
  exit 1
fi

if command -v uv >/dev/null 2>&1; then
  uv tool install --force "$wheel_path"
else
  python_version=$($python_bin -c 'import sys; print(f"{sys.version_info.major}.{sys.version_info.minor}")')
  if ! $python_bin -c 'import sys; raise SystemExit(sys.version_info < (3, 12))'; then
    printf 'Zero requires Python 3.12 or newer; found %s.\n' "$python_version" >&2
    exit 1
  fi
  install_root=${ZERO_INSTALL_ROOT:-"$HOME/.local/share/zero-client"}
  bin_root=${ZERO_BIN_DIR:-"$HOME/.local/bin"}
  "$python_bin" -m venv "$install_root"
  "$install_root/bin/python" -m pip install --disable-pip-version-check \
    --upgrade --force-reinstall "$wheel_path"
  mkdir -p "$bin_root"
  ln -sfn "$install_root/bin/zero" "$bin_root/zero"
  ln -sfn "$install_root/bin/zero-mcp" "$bin_root/zero-mcp"
  printf 'Installed zero and zero-mcp in %s.\n' "$bin_root"
  case ":$PATH:" in
    *":$bin_root:"*) ;;
    *) printf 'Add %s to PATH before running zero.\n' "$bin_root" ;;
  esac
fi

printf '%s\n' "Next: zero login https://api.sandbox.0-uk.com"
