#!/bin/bash
set -euo pipefail

readonly script_dir="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
readonly minimum_version="2.46.0"

# Git is Hermit's own transport and therefore cannot safely be a Hermit package:
# doing so recursively invokes Hermit while it holds its package lock. Keep this
# tracked environment shim in bin/ so activation still enforces the protocol
# floor before any repository operation reaches credential negotiation.
path_without_hermit=""
IFS=: read -r -a path_entries <<<"${PATH}"
for entry in "${path_entries[@]}"; do
  [[ "${entry}" == "${script_dir}" ]] && continue
  path_without_hermit="${path_without_hermit:+${path_without_hermit}:}${entry}"
done

system_git="$(PATH="${path_without_hermit}" command -v git || true)"
if [[ -z "${system_git}" ]]; then
  echo "error: Git ${minimum_version} or newer is required; no system Git was found" >&2
  exit 1
fi

installed_version="$(${system_git} --version | awk '{print $3}')"
version_at_least() {
  local installed="$1" required="$2" installed_part required_part index
  local -a installed_parts required_parts
  IFS=. read -r -a installed_parts <<<"${installed}"
  IFS=. read -r -a required_parts <<<"${required}"
  for index in 0 1 2; do
    installed_part="${installed_parts[${index}]:-0}"
    required_part="${required_parts[${index}]:-0}"
    ((10#${installed_part} > 10#${required_part})) && return 0
    ((10#${installed_part} < 10#${required_part})) && return 1
  done
  return 0
}

if ! version_at_least "${installed_version}" "${minimum_version}"; then
  echo "error: Git ${minimum_version} or newer is required for Meridian Nostr authentication (found ${installed_version})" >&2
  if [[ "$(uname -s)" == "Darwin" ]]; then
    echo "Install a current Git (for example, 'brew install git'), then reactivate Hermit." >&2
  fi
  exit 1
fi

exec "${system_git}" "$@"
