#!/usr/bin/env sh

resolve_bridge_dir() {
	bridge_source=$1
	case "$bridge_source" in
		*/*) ;;
		*) bridge_source=$(command -v "$bridge_source" 2>/dev/null) || return 1 ;;
	esac

	while [ -h "$bridge_source" ]; do
		bridge_parent=$(CDPATH= cd -P "$(dirname "$bridge_source")" 2>/dev/null && pwd) || return 1
		bridge_link=$(readlink "$bridge_source") || return 1
		case "$bridge_link" in
			/*) bridge_source=$bridge_link ;;
			*) bridge_source=$bridge_parent/$bridge_link ;;
		esac
	done

	CDPATH= cd -P "$(dirname "$bridge_source")" 2>/dev/null && pwd
}

if [ -n "${HOME:-}" ]; then
	dispatcher="$HOME/.qoder/entry/qoder"
	if [ -f "$dispatcher" ] && [ -x "$dispatcher" ]; then
		exec "$dispatcher" "$@"
		status=$?
		printf 'Failed to start CLI dispatcher: %s\n' "$dispatcher" >&2
		exit "$status"
	fi
fi

bridge_dir=$(resolve_bridge_dir "$0") || {
	printf 'Unable to locate the IDE CLI bridge directory.\n' >&2
	exit 127
}
native="$bridge_dir/code"
if [ -f "$native" ] && [ -x "$native" ]; then
	exec "$native" "$@"
	status=$?
	printf 'Failed to start IDE CLI native launcher: %s\n' "$native" >&2
	exit "$status"
fi

printf 'IDE CLI native launcher is missing or not executable: %s\n' "$native" >&2
exit 127
