#!/bin/sh
set -eu
base=https://navicon.pro
work=$(mktemp -d)
trap 'rm -rf "$work"' EXIT HUP INT TERM
verify_sha() {
  expected=$1
  file=$2
  if command -v sha256sum >/dev/null 2>&1; then
    printf '%s  %s\n' "$expected" "$file" | sha256sum -c -
  elif command -v shasum >/dev/null 2>&1; then
    printf '%s  %s\n' "$expected" "$file" | shasum -a 256 -c -
  else
    echo "A SHA-256 utility (sha256sum or shasum) is required." >&2
    exit 5
  fi
}
case "$(uname -s)" in
  Darwin) manifest_name=version-vpn-macos.json; package_name=NavigatorConnect-VPN.pkg ;;
  Linux)
    if [ -r /etc/os-release ]; then . /etc/os-release; else ID=; ID_LIKE=; fi
    case "${ID:-} ${ID_LIKE:-}" in
      *fedora*|*rhel*|*centos*|*suse*) manifest_name=version-vpn-linux-rpm.json; package_name=navigatorconnect-vpn.rpm ;;
      *) manifest_name=version-vpn-linux.json; package_name=navigatorconnect-vpn.deb ;;
    esac ;;
  *) echo "Supported systems: Linux and macOS" >&2; exit 2 ;;
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/$package_name"
curl -fL --retry 3 "$url" -o "$package"
verify_sha "$sha" "$package"
case "$(uname -s)" in
  Darwin) sudo installer -pkg "$package" -target / ;;
  Linux)
    case "${ID:-} ${ID_LIKE:-}" in
      *fedora*|*rhel*|*centos*) sudo dnf install -y "$package" ;;
      *suse*) sudo zypper --non-interactive --no-gpg-checks install "$package" ;;
      *) if command -v apt-get >/dev/null 2>&1; then sudo apt-get install -y "$package"; else sudo dpkg -i "$package"; fi ;;
    esac ;;
esac
