#!/bin/sh 

resolve_path() {
	resolved_path="$1"
	link_count=0
	while [ -L "$resolved_path" ]; do
		link_target=$(/usr/bin/readlink "$resolved_path") || return 1
		case "$link_target" in
			/*) resolved_path="$link_target" ;;
			*) resolved_path="$(/usr/bin/dirname "$resolved_path")/$link_target" ;;
		esac
		link_count=$((link_count + 1))
		if [ "$link_count" -ge 40 ]; then
			return 1
		fi
	done
	resolved_directory=$(cd -P "$(/usr/bin/dirname "$resolved_path")" 2>/dev/null && pwd)
	if [ -n "$resolved_directory" ]; then
		printf '%s/%s\n' "$resolved_directory" "$(/usr/bin/basename "$resolved_path")"
	else
		printf '%s\n' "$resolved_path"
	fi
}

expected_identity=$(/usr/bin/stat -L -f '%d:%i' "$1" 2>/dev/null) || {
	echo "Could not inspect the bundled ksdiff" 1>&2
	exit 3
}

ksdiff_exec=$(command -v ksdiff)
if [ -z "$ksdiff_exec" ]; then
	remaining_path="$PATH"
	while :; do
		case "$remaining_path" in
			*:*) directory=${remaining_path%%:*}; remaining_path=${remaining_path#*:}; has_more=1 ;;
			*) directory="$remaining_path"; has_more=0 ;;
		esac
		[ -n "$directory" ] || directory=.
		candidate="$directory/ksdiff"
		if [ -L "$candidate" ] && [ ! -e "$candidate" ]; then
			printf 'ksdiff path: %s\n' "$candidate"
			printf 'ksdiff target: %s\n' "$(resolve_path "$candidate")"
			exit 2
		fi
		[ "$has_more" -eq 1 ] || break
	done
	exit 1
fi

case "$ksdiff_exec" in
	/*) ;;
	*) ksdiff_exec="$PWD/$ksdiff_exec" ;;
esac
printf 'ksdiff path: %s\n' "$ksdiff_exec"
if [ -L "$ksdiff_exec" ]; then
	printf 'ksdiff target: %s\n' "$(resolve_path "$ksdiff_exec")"
fi

installed_identity=$(/usr/bin/stat -L -f '%d:%i' "$ksdiff_exec" 2>/dev/null) || {
	if [ -L "$ksdiff_exec" ]; then
		exit 2
	fi
	echo "Could not inspect the selected ksdiff" 1>&2
	exit 3
}

if [ "$installed_identity" = "$expected_identity" ]; then
	exit 0
fi

exit 210
