#!/usr/bin/env bash
# Linkbreakers CLI installer.
set -euo pipefail

REPO="linkbreakers-com/linkbreakers-cli"
METADATA_URL="https://cli.linkbreakers.com/latest.json"
BASE_URL="https://github.com/${REPO}/releases/download"

if ! command -v python3 >/dev/null 2>&1; then
  echo "python3 is required to parse installer metadata." >&2
  exit 1
fi

detect_os() {
  case "$(uname -s)" in
    Darwin) echo "darwin" ;;
    Linux) echo "linux" ;;
    *)
      echo "Unsupported OS: $(uname -s)" >&2
      exit 1
      ;;
  esac
}

detect_arch() {
  case "$(uname -m)" in
    x86_64|amd64) echo "amd64" ;;
    arm64|aarch64) echo "arm64" ;;
    *)
      echo "Unsupported architecture: $(uname -m)" >&2
      exit 1
      ;;
  esac
}

pick_install_dir() {
  if [ -n "${LINKBREAKERS_INSTALL_DIR:-}" ]; then
    echo "${LINKBREAKERS_INSTALL_DIR}"
    return
  fi

  if [ -w "/usr/local/bin" ]; then
    echo "/usr/local/bin"
    return
  fi

  if [ -d "$HOME/.local/bin" ] || mkdir -p "$HOME/.local/bin" 2>/dev/null; then
    echo "$HOME/.local/bin"
    return
  fi

  echo "Unable to find a writable install directory." >&2
  exit 1
}

OS="$(detect_os)"
ARCH="$(detect_arch)"
INSTALL_DIR="$(pick_install_dir)"
TMP_DIR="$(mktemp -d)"
trap 'rm -rf "${TMP_DIR}"' EXIT

ASSET="linkbreakers-cli_${OS}_${ARCH}.tar.gz"
VERSION="$(curl -fsSL "${METADATA_URL}" | python3 -c 'import json,sys; print(json.load(sys.stdin)["version"])')"
DOWNLOAD_URL="${BASE_URL}/v${VERSION}/linkbreakers-cli_${VERSION}_${OS}_${ARCH}.tar.gz"

echo "Downloading ${DOWNLOAD_URL}"
curl -fsSL "${DOWNLOAD_URL}" -o "${TMP_DIR}/linkbreakers.tar.gz"

tar -xzf "${TMP_DIR}/linkbreakers.tar.gz" -C "${TMP_DIR}"
chmod +x "${TMP_DIR}/linkbreakers"
mv "${TMP_DIR}/linkbreakers" "${INSTALL_DIR}/linkbreakers"

echo "Installed linkbreakers to ${INSTALL_DIR}/linkbreakers"
echo "Run: linkbreakers version"
