#!/usr/bin/env bash

set -euo pipefail

MANIFEST_URL="https://install.openfans.space/latest.json"

if [[ "$(uname -s)" != "Darwin" ]]; then
  echo "OpenFans V0.9.4.1 currently requires macOS." >&2
  exit 1
fi

for command_name in curl shasum unzip; do
  if ! command -v "$command_name" >/dev/null 2>&1; then
    echo "OpenFans installer requires $command_name." >&2
    exit 1
  fi
done

download_dir="$(mktemp -d "${TMPDIR:-/tmp}/openfans-install.XXXXXX")"
trap 'rm -rf "$download_dir"' EXIT
manifest_path="$download_dir/latest.json"
package_path="$download_dir/openfans.zip"

echo "Checking the latest OpenFans release..."
curl --fail --location --retry 3 --retry-delay 2 \
  --connect-timeout 20 --output "$manifest_path" "$MANIFEST_URL"

read_manifest_value() {
  /usr/bin/plutil -extract "$1" raw -o - "$manifest_path"
}

version="$(read_manifest_value version)"
package_url="$(read_manifest_value package_url)"
package_sha256="$(read_manifest_value sha256)"
package_size="$(read_manifest_value package_size)"

if [[ -z "$version" || -z "$package_url" || ! "$package_sha256" =~ ^[0-9a-fA-F]{64}$ || ! "$package_size" =~ ^[0-9]+$ ]]; then
  echo "The OpenFans release manifest is invalid. Installation stopped safely." >&2
  exit 1
fi

echo "Downloading OpenFans V${version}..."
curl --fail --location --retry 3 --retry-delay 2 \
  --connect-timeout 20 --output "$package_path" "$package_url"

actual_size="$(stat -f '%z' "$package_path")"
if [[ "$actual_size" != "$package_size" ]]; then
  echo "OpenFans download size verification failed. Installation stopped safely." >&2
  echo "Expected: $package_size" >&2
  echo "Received: $actual_size" >&2
  exit 1
fi

actual_sha256="$(shasum -a 256 "$package_path" | awk '{print $1}')"
if [[ "$actual_sha256" != "$package_sha256" ]]; then
  echo "OpenFans download verification failed. Installation stopped safely." >&2
  echo "Expected: $package_sha256" >&2
  echo "Received: $actual_sha256" >&2
  exit 1
fi

unzip -q "$package_path" -d "$download_dir"
package_root="$(unzip -Z1 "$package_path" | awk -F/ 'NF > 1 { print $1; exit }')"
installer_path="$download_dir/$package_root/install.sh"
if [[ ! -f "$installer_path" ]]; then
  echo "OpenFans installer was not found in the verified package." >&2
  exit 1
fi

echo "OpenFans V${version} verified. Starting the installer..."
exec /bin/bash "$installer_path" --target auto
