#!/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
}
manifest="$work/version.json"
curl -fsSL "$base/version-navissh.json" -o "$manifest"
case "$(uname -s)" in
  Darwin) key=macos ;;
  Linux) key=linuxDeb ;;
  *) echo "Supported systems: Linux and macOS" >&2; exit 2 ;;
esac
read_values=$(python3 - "$manifest" "$key" <<'PY'
import json, sys
item = json.load(open(sys.argv[1], encoding='utf-8'))[sys.argv[2]]
print(item['url'])
print(item['sha256'])
PY
)
url=$(printf '%s\n' "$read_values" | sed -n '1p')
sha=$(printf '%s\n' "$read_values" | sed -n '2p')
name=${url##*/}
package="$work/$name"
curl -fL --retry 3 "$url" -o "$package"
verify_sha "$sha" "$package"
case "$(uname -s)" in
  Linux)
    if command -v apt-get >/dev/null 2>&1; then
      sudo apt-get install -y "$package"
    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"
    elif command -v rpm >/dev/null 2>&1; then
      sudo rpm -Uvh "$package"
    else
      echo "No supported package manager found (apt, dnf, zypper, rpm)." >&2
      exit 3
    fi
    ;;
  Darwin)
    mkdir -p "$work/unpacked" "$HOME/Applications"
    ditto -x -k "$package" "$work/unpacked"
    app=$(printf '%s\n' "$work"/unpacked/*.app | sed -n '1p')
    [ -d "$app" ] || { echo "The macOS app bundle is missing from the archive." >&2; exit 4; }
    ditto "$app" "$HOME/Applications/$(basename "$app")"
    printf 'Installed %s to ~/Applications\n' "$(basename "$app")"
    ;;
esac
