#!/usr/bin/sh
# Ilusm public driver — install location is always this script’s directory (ILUSM_HOME).
# Run-context snapshot lives in the user cache + a PID pointer under /tmp so read-only
# system installs (e.g. /usr/share/ilusm) work without writing into the prefix.
set -e
ROOT="$(cd "$(dirname "$0")" && pwd)"
ILBC="$ROOT/ilusm.ilbc"
export ILUSM_HOME="$ROOT"
cd "$ROOT" || exit 1

case "${1:-}" in
--version|-V|version)
	if [ -f "$ROOT/VERSION" ]; then
		cat "$ROOT/VERSION"
	else
		echo "ilusm"
	fi
	exit 0
	;;
esac

# Prefer stage0/<os>-<arch>/ilusm-min[.exe]; fall back to legacy paths (see stage0/README).
STAGE0="$(sh "$ROOT/stage0/resolve_seed.sh" "$ROOT")"

# Rebuild ilusm.ilbc when lib sources are newer than bytecode (maintainer trees only).
# Public bundles ship .ilusm_packaged so installs behave like Go/Python (no surprise compile).
if [ ! -f "$ROOT/.ilusm_packaged" ]; then
	if [ ! -f "$ILBC" ] || find "$ROOT/lib" -name "*.ilu" -newer "$ILBC" 2>/dev/null | grep -q .; then
		echo "Rebuilding ilusm.ilbc via stage-0 seed..."
		"$STAGE0" compile
	fi
fi

# Snapshot argv + OS env for lib/runtime/host_run_ctx.ilu (stdlib getenv bridge).
# 1) JSON in user-writable XDG cache, keyed by install path hash (multi-install safe).
# 2) Pointer /tmp/ilusm-run-ctx.<pid> so the VM finds the JSON after exec (same PID).
if command -v python3 >/dev/null 2>&1; then
	if [ -n "${XDG_CACHE_HOME:-}" ]; then
		CBASE="$XDG_CACHE_HOME"
	elif [ -n "${HOME:-}" ]; then
		CBASE="$HOME/.cache"
	else
		CBASE="/tmp"
	fi
	mkdir -p "$CBASE/ilusm" 2>/dev/null || CBASE="/tmp"
	HASH="$(printf '%s' "$ROOT" | sha256sum 2>/dev/null | awk '{print $1}')"
	[ -n "$HASH" ] || HASH="$(printf '%s' "$ROOT" | cksum | awk '{print $1}')"
	CTXFILE="$CBASE/ilusm/run_ctx_${HASH}.json"
	export ILUSM_CTX_OUT="$CTXFILE"
	PTR="/tmp/ilusm-run-ctx.$$"
	umask 077
	python3 -c '
import json, os, sys
out = os.environ["ILUSM_CTX_OUT"]
args = sys.argv[1:]
d = os.path.dirname(out) or "."
os.makedirs(d, exist_ok=True)
with open(out, "w", encoding="utf-8") as f:
    f.write(json.dumps({"argv": args, "env": dict(os.environ)}))
' "$STAGE0" run "$@"
	printf '%s\n' "$CTXFILE" >"$PTR" 2>/dev/null || true
	chmod 600 "$PTR" 2>/dev/null || true
	# Optional: mirror next to install when writable (easier debugging).
	if test -w "$ROOT"; then
		cp -f "$CTXFILE" "$ROOT/ilusm_run_ctx.json" 2>/dev/null || true
	fi
fi

exec "$STAGE0" run "$@"
