#!/bin/sh
# mb CLI installer: curl -fsSL https://get.mesangebleue.io | sh
#
# Installs the latest (or MB_VERSION=vX.Y.Z) release for this OS/arch into
# MB_INSTALL_DIR (default ~/.local/bin), after verifying its SHA-256 against
# the release's checksums.txt. No root needed.
set -eu

BASE="${MB_DOWNLOAD_BASE:-https://get.mesangebleue.io/mb}"
DIR="${MB_INSTALL_DIR:-$HOME/.local/bin}"

err() { printf 'mb install: %s\n' "$*" >&2; exit 1; }
need() { command -v "$1" >/dev/null 2>&1 || err "$1 is required"; }
need curl
need tar
need uname

case "$(uname -s)" in
  Darwin) os=darwin ;;
  Linux) os=linux ;;
  *) err "unsupported OS $(uname -s); on Windows use install.ps1, Scoop or winget" ;;
esac
case "$(uname -m)" in
  x86_64 | amd64) arch=amd64 ;;
  arm64 | aarch64) arch=arm64 ;;
  *) err "unsupported architecture $(uname -m)" ;;
esac

version="${MB_VERSION:-$(curl -fsSL "$BASE/latest.txt" | tr -d '[:space:]')}"
case "$version" in
  v[0-9]*) ;;
  *) err "could not determine the version to install (got '$version')" ;;
esac
num="${version#v}"
archive="mb_${num}_${os}_${arch}.tar.gz"

tmp="$(mktemp -d)"
trap 'rm -rf "$tmp"' EXIT INT TERM
printf 'Downloading mb %s for %s/%s...\n' "$version" "$os" "$arch"
curl -fsSL "$BASE/$version/$archive" -o "$tmp/$archive" || err "download failed: $BASE/$version/$archive"
curl -fsSL "$BASE/$version/checksums.txt" -o "$tmp/checksums.txt" || err "checksums download failed"

want="$(awk -v f="$archive" '$2 == f {print $1}' "$tmp/checksums.txt")"
[ -n "$want" ] || err "$archive is not listed in checksums.txt"
if command -v sha256sum >/dev/null 2>&1; then
  got="$(sha256sum "$tmp/$archive" | awk '{print $1}')"
else
  got="$(shasum -a 256 "$tmp/$archive" | awk '{print $1}')"
fi
[ "$got" = "$want" ] || err "checksum mismatch for $archive (expected $want, got $got)"

tar -xzf "$tmp/$archive" -C "$tmp" mb
mkdir -p "$DIR"
install -m 0755 "$tmp/mb" "$DIR/mb" 2>/dev/null || { cp "$tmp/mb" "$DIR/mb" && chmod 0755 "$DIR/mb"; }

printf 'Installed %s\n' "$("$DIR/mb" version)"
case ":$PATH:" in
  *":$DIR:"*) ;;
  *) printf '\nAdd %s to your PATH, e.g.:\n  echo '\''export PATH="%s:$PATH"'\'' >> ~/.profile\n' "$DIR" "$DIR" ;;
esac
printf '\nNext: mb login\nGuide: https://get.mesangebleue.io/start\n'
