#!/bin/sh
set -eu
base=https://navicon.pro
work=$(mktemp -d)
trap 'rm -rf "$work"' EXIT HUP INT TERM
case "$(uname -s)" in
  Darwin)
    manifest="$work/version.json"
    curl -fsSL "$base/version-connect-macos.json" -o "$manifest"
    url=$(python3 -c 'import json,sys; print(json.load(open(sys.argv[1]))["url"])' "$manifest")
    sha=$(python3 -c 'import json,sys; print(json.load(open(sys.argv[1]))["sha256"])' "$manifest")
    package="$work/NavigatorConnect.pkg"
    curl -fL --retry 3 "$url" -o "$package"
    printf '%s  %s\n' "$sha" "$package" | shasum -a 256 -c -
    sudo installer -pkg "$package" -target /
    ;;
  Linux)
    if [ -r /etc/os-release ]; then . /etc/os-release; else ID=; ID_LIKE=; fi
    case "${ID:-} ${ID_LIKE:-}" in
      *fedora*|*rhel*|*centos*|*suse*) kind=rpm; manifest_name=version-connect-linux-rpm.json ;;
      *) kind=deb; manifest_name=version-connect-linux.json ;;
    esac
    manifest="$work/version.json"
    curl -fsSL "$base/$manifest_name" -o "$manifest"
    url=$(python3 -c 'import json,sys; print(json.load(open(sys.argv[1]))["url"])' "$manifest")
    sha=$(python3 -c 'import json,sys; print(json.load(open(sys.argv[1]))["sha256"])' "$manifest")
    package="$work/navigatorconnect.$kind"
    curl -fL --retry 3 "$url" -o "$package"
    printf '%s  %s\n' "$sha" "$package" | sha256sum -c -
    if [ "$kind" = deb ]; then
      if command -v apt-get >/dev/null 2>&1; then sudo apt-get install -y "$package"; else sudo dpkg -i "$package"; fi
    elif command -v dnf >/dev/null 2>&1; then
      sudo dnf install -y "$package"
    elif command -v zypper >/dev/null 2>&1; then
      sudo zypper --non-interactive --no-gpg-checks install "$package"
    else
      sudo rpm -Uvh "$package"
    fi
    ;;
  *) echo "Supported systems: Linux and macOS" >&2; exit 2 ;;
esac
