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

REPO="matthart1983/syswatch"
DEST_DIR="${HOME}/syswatch"
TMP_DIR="$(mktemp -d)"

echo "==> Получаю информацию о последнем релизе ${REPO}..."

# Определяем архитектуру и ОС для выбора нужного ассета
OS="$(uname -s | tr '[:upper:]' '[:lower:]')"
ARCH="$(uname -m)"

# Запрос к GitHub API за метаданными последнего релиза
RELEASE_JSON="$(curl -sSL -H "Accept: application/vnd.github+json" \
  "https://api.github.com/repos/${REPO}/releases/latest")"

if [[ -z "$RELEASE_JSON" || "$RELEASE_JSON" == "null" ]]; then
  echo "Ошибка: не удалось получить данные о релизе." >&2
  exit 1
fi

TAG_NAME="$(echo "$RELEASE_JSON" | grep -m1 '"tag_name"' | sed -E 's/.*"tag_name":\s*"([^"]+)".*/\1/')"
echo "==> Последняя версия: ${TAG_NAME}"

# Извлекаем ссылки на все ассеты
mapfile -t ASSET_URLS < <(echo "$RELEASE_JSON" | grep '"browser_download_url"' | sed -E 's/.*"browser_download_url":\s*"([^"]+)".*/\1/')

if [[ ${#ASSET_URLS[@]} -eq 0 ]]; then
  echo "Ошибка: релиз не содержит скачиваемых ассетов (возможно, только исходники)." >&2
  exit 1
fi

echo "==> Доступные файлы релиза:"
for i in "${!ASSET_URLS[@]}"; do
  echo "  [$i] $(basename "${ASSET_URLS[$i]}")"
done

# Пытаемся автоматически выбрать подходящий под ОС/архитектуру файл,
# иначе берём первый .tar.gz / .zip из списка
SELECTED_URL=""
for url in "${ASSET_URLS[@]}"; do
  fname="$(basename "$url")"
  fname_lc="$(echo "$fname" | tr '[:upper:]' '[:lower:]')"
  if [[ "$fname_lc" == *"$OS"* && "$fname_lc" == *"$ARCH"* ]]; then
    SELECTED_URL="$url"
    break
  fi
done

if [[ -z "$SELECTED_URL" ]]; then
  # fallback: первый архив в списке
  for url in "${ASSET_URLS[@]}"; do
    if [[ "$url" == *.tar.gz || "$url" == *.zip ]]; then
      SELECTED_URL="$url"
      break
    fi
  done
fi

if [[ -z "$SELECTED_URL" ]]; then
  echo "Не удалось автоматически определить нужный файл. Выберите вручную из списка выше и скачайте:"
  echo "curl -sSLo <имя_файла> <URL>"
  exit 1
fi

FILE_NAME="$(basename "$SELECTED_URL")"
echo "==> Скачиваю: ${FILE_NAME}"
curl -sSL -o "${TMP_DIR}/${FILE_NAME}" "$SELECTED_URL"

echo "==> Распаковываю в ${DEST_DIR}..."
mkdir -p "$DEST_DIR"

case "$FILE_NAME" in
  *.tar.gz|*.tgz)
    tar -xzf "${TMP_DIR}/${FILE_NAME}" -C "$DEST_DIR"
    ;;
  *.zip)
    unzip -o "${TMP_DIR}/${FILE_NAME}" -d "$DEST_DIR"
    ;;
  *)
    echo "Неизвестный формат архива, файл сохранён без распаковки: ${TMP_DIR}/${FILE_NAME}"
    cp "${TMP_DIR}/${FILE_NAME}" "$DEST_DIR/"
    ;;
esac

rm -rf "$TMP_DIR"

echo "==> Готово. Файлы распакованы в: ${DEST_DIR}"
ls -la "$DEST_DIR"
