#!/bin/sh
# Установка ZubrCode — кодинг-агента ZubrIQ (zubrcode#1).
#
#   curl -fsSL https://zubriq.by/install.sh | sh
#
# Ставит бинарь zubrcode с get.zubriq.by (не opencode: апстримовский
# opencode.ai/install ставил бы чужую программу), сверяет архив с SHA256SUMS.
#
#   ZUBRCODE_VERSION=1.18.32-2   конкретная версия (по умолчанию — последняя)
#   ZUBRCODE_INSTALL_DIR=…       куда положить (по умолчанию ~/.local/bin)
#   ZUBRCODE_RELEASES_URL=…      зеркало релизов
set -eu

RELEASES="${ZUBRCODE_RELEASES_URL:-https://get.zubriq.by/zubrcode/releases}"
DIR="${ZUBRCODE_INSTALL_DIR:-$HOME/.local/bin}"

say() { printf '%s\n' "$*"; }
die() { printf 'zubrcode: %s\n' "$*" >&2; exit 1; }
need() { command -v "$1" >/dev/null 2>&1 || die "нужна команда $1"; }
need curl
need tar

case "$(uname -s)" in
  Linux) os=linux ;;
  Darwin) os=darwin ;;
  MINGW* | MSYS* | CYGWIN*) die "на Windows ставьте из PowerShell: irm https://zubriq.by/install.ps1 | iex" ;;
  *) die "эта система пока не поддерживается: $(uname -s) (есть сборки для Linux, macOS и Windows)" ;;
esac
case "$(uname -m)" in
  x86_64 | amd64) arch=x64 ;;
  aarch64 | arm64) arch=arm64 ;;
  *) die "этот процессор пока не поддерживается: $(uname -m)" ;;
esac
platform="$os-$arch"
# Обычная сборка требует AVX2; на ВМ с процессором QEMU его нет — там baseline.
if [ "$platform" = linux-x64 ] && ! grep -q ' avx2' /proc/cpuinfo 2>/dev/null; then
  platform=linux-x64-baseline
fi

version="${ZUBRCODE_VERSION:-}"
if [ -z "$version" ]; then
  version=$(curl -fsSL "$RELEASES/latest.json" | sed -n 's/.*"version" *: *"\([^"]*\)".*/\1/p')
  [ -n "$version" ] || die "не удалось узнать последнюю версию ($RELEASES/latest.json)"
fi

archive="zubrcode-$platform.tar.gz"
tmp=$(mktemp -d)
trap 'rm -rf "$tmp"' EXIT
say "ZubrCode $version ($platform)…"
curl -fsSL "$RELEASES/v$version/$archive" -o "$tmp/$archive" || die "нет сборки $archive для версии $version"
curl -fsSL "$RELEASES/v$version/SHA256SUMS" -o "$tmp/SHA256SUMS" || die "нет SHA256SUMS для версии $version"

expected=$(awk -v f="$archive" '$2 == f { print $1 }' "$tmp/SHA256SUMS")
[ -n "$expected" ] || die "$archive нет в SHA256SUMS"
if command -v sha256sum >/dev/null 2>&1; then
  actual=$(sha256sum "$tmp/$archive" | awk '{print $1}')
else
  actual=$(shasum -a 256 "$tmp/$archive" | awk '{print $1}')
fi
[ "$actual" = "$expected" ] || die "контрольная сумма $archive не совпала — архив повреждён или подменён"

tar -xzf "$tmp/$archive" -C "$tmp" ./zubrcode
mkdir -p "$DIR"
mv "$tmp/zubrcode" "$DIR/zubrcode"
chmod 0755 "$DIR/zubrcode"
say "Готово: $DIR/zubrcode ($("$DIR/zubrcode" --version))"

case ":$PATH:" in
  *":$DIR:"*) ;;
  *) say "" && say "Добавьте $DIR в PATH, например: echo 'export PATH=\"$DIR:\$PATH\"' >> ~/.profile" ;;
esac

say ""
if [ -f "$HOME/.qwen/settings.json" ]; then
  say "Нашли настройки zq — ключ ZubrIQ и MCP-серверы ZubrCode подхватит сам."
else
  say "Войдите: zubrcode auth login -p zubriq   (или задайте ZUBRIQ_API_KEY)"
fi
say "Запуск: zubrcode в папке проекта. Обновление: zubrcode upgrade."
