#!/bin/zsh

APP_ROOT="$(cd "$(dirname "$0")/.." && pwd)"
JAR="$APP_ROOT/Resources/koldkitty.jar"
JAVA_BIN=""

show_error() {
  /usr/bin/osascript -e 'display dialog "'"$1"'" buttons {"OK"} default button "OK" with icon caution' >/dev/null 2>&1 || true
}

java_is_compatible() {
  local CANDIDATE="$1"
  [[ -x "$CANDIDATE" ]] || return 1
  local V
  V="$($CANDIDATE -XshowSettings:properties -version 2>&1 | /usr/bin/awk -F'= ' '/java.specification.version =/{print $2; exit}')"
  [[ -n "$V" ]] || return 1
  if [[ "$V" == 1.* ]]; then V="${V#1.}"; fi
  [[ "${V%%.*}" -ge 17 ]] 2>/dev/null
}

[[ -f "$JAR" ]] || { show_error "koldkitty.jar is missing from the app bundle."; exit 1; }

# 1) System Java selected by macOS.
if [[ -x /usr/libexec/java_home ]]; then
  JAVA_HOME_CANDIDATE="$(/usr/libexec/java_home 2>/dev/null || true)"
  if [[ -n "$JAVA_HOME_CANDIDATE" ]] && java_is_compatible "$JAVA_HOME_CANDIDATE/bin/java"; then
    JAVA_BIN="$JAVA_HOME_CANDIDATE/bin/java"
  fi
fi

# 2) Processing 4 bundled Java.
if [[ -z "$JAVA_BIN" ]]; then
  for ROOT in "/Applications/Processing.app/Contents" "$HOME/Applications/Processing.app/Contents"; do
    [[ -d "$ROOT" ]] || continue
    while IFS= read -r CANDIDATE; do
      if java_is_compatible "$CANDIDATE"; then JAVA_BIN="$CANDIDATE"; break 2; fi
    done < <(/usr/bin/find "$ROOT" -type f -name java -path '*/bin/java' 2>/dev/null)
  done
fi

# 3) Common Homebrew launcher paths.
if [[ -z "$JAVA_BIN" ]]; then
  for CANDIDATE in "/opt/homebrew/bin/java" "/usr/local/bin/java"; do
    if java_is_compatible "$CANDIDATE"; then JAVA_BIN="$CANDIDATE"; break; fi
  done
fi

if [[ -z "$JAVA_BIN" ]]; then
  show_error "koldkitty needs Java 17 or later. Processing 4 includes a compatible runtime; keep Processing installed in /Applications and try again."
  exit 1
fi

# Each app launch detaches one independent cat process, then this launcher exits.
/usr/bin/nohup /usr/bin/env -u __CFBundleIdentifier "$JAVA_BIN"   -Dapple.awt.UIElement=true   -Dapple.awt.application.name="koldkitty"   -Dfile.encoding=UTF-8   -jar "$JAR"   </dev/null >/dev/null 2>&1 &

exit 0
