#!/usr/bin/env bash
set -euo pipefail

APP="cherrypic"
# Public R2 base URLs. Replace with custom domains (e.g. dl.cherrypic.in)
# if you attach one to the buckets.
PROD_BASE_URL="${CHERRYPIC_INSTALL_BASE_URL:-https://pub-395a267e82ba4d6bbe0d3dbd03f502ce.r2.dev}"
STAGING_BASE_URL="${CHERRYPIC_INSTALL_STAGING_BASE_URL:-https://pub-d9b2cf7e512a4aba9cfb4cb642f05bd1.r2.dev}"

VARIANT="${CHERRYPIC_VARIANT:-prod}"           # prod | staging
VERSION="${CHERRYPIC_VERSION:-latest}"         # latest | e.g. 0.4.0
INSTALL_DIR="${INSTALL_DIR:-/usr/local/bin}"

case "$VARIANT" in
  prod)
    NAME="$APP"
    BASE_URL="$PROD_BASE_URL"
    ;;
  staging)
    NAME="${APP}-staging"
    BASE_URL="$STAGING_BASE_URL"
    ;;
  *)
    echo "Unknown CHERRYPIC_VARIANT '$VARIANT' (use prod or staging)" >&2
    exit 1
    ;;
esac

OS="$(uname -s | tr '[:upper:]' '[:lower:]')"
ARCH="$(uname -m)"

case "$OS" in
  linux) OS="linux" ;;
  darwin) OS="darwin" ;;
  *)
    echo "Unsupported OS: $OS" >&2
    exit 1
    ;;
esac

case "$ARCH" in
  x86_64|amd64) ARCH="amd64" ;;
  aarch64|arm64) ARCH="arm64" ;;
  *)
    echo "Unsupported architecture: $ARCH" >&2
    exit 1
    ;;
esac

ARCHIVE="${NAME}_${OS}_${ARCH}.tar.gz"

if [ "$VERSION" = "latest" ]; then
  VERSION="$(curl -fsSL "${BASE_URL}/VERSION")"
  echo "Latest version: ${VERSION}"
fi

TMP_DIR="$(mktemp -d)"
trap 'rm -rf "$TMP_DIR"' EXIT

URL="${BASE_URL}/${ARCHIVE}?v=${VERSION}"
echo "Downloading ${URL}"
curl -fsSL "$URL" -o "${TMP_DIR}/${ARCHIVE}"

# Verify checksum when available.
if curl -fsSL "${BASE_URL}/checksums.txt" -o "${TMP_DIR}/checksums.txt" 2>/dev/null; then
  EXPECTED="$(grep "${ARCHIVE}" "${TMP_DIR}/checksums.txt" | awk '{print $1}')"
  if [ -n "$EXPECTED" ]; then
    if command -v sha256sum >/dev/null; then
      ACTUAL="$(sha256sum "${TMP_DIR}/${ARCHIVE}" | awk '{print $1}')"
    else
      ACTUAL="$(shasum -a 256 "${TMP_DIR}/${ARCHIVE}" | awk '{print $1}')"
    fi
    if [ "$EXPECTED" != "$ACTUAL" ]; then
      echo "Checksum mismatch for ${ARCHIVE}! Expected ${EXPECTED}, got ${ACTUAL}" >&2
      exit 1
    fi
    echo "Checksum OK"
  fi
fi

echo "Extracting"
tar -xzf "${TMP_DIR}/${ARCHIVE}" -C "$TMP_DIR"

chmod +x "${TMP_DIR}/${NAME}"

if [ "$(id -u)" -eq 0 ]; then
  INSTALL_DIR="/usr/local/bin"
fi

if [ ! -d "$INSTALL_DIR" ]; then
  mkdir -p "$INSTALL_DIR" 2>/dev/null || true
fi

echo "Installing to ${INSTALL_DIR}/${NAME}"

if [ -w "$INSTALL_DIR" ]; then
  mv "${TMP_DIR}/${NAME}" "${INSTALL_DIR}/${NAME}"
else
  sudo mv "${TMP_DIR}/${NAME}" "${INSTALL_DIR}/${NAME}"
fi

echo "Installed:"
"${INSTALL_DIR}/${NAME}" --version || true
