#!/bin/sh -e

if [ -z "$1" ] || [ -z "$2" ]; then
	printf "Usage: \"%s\" <file> <file> [file]...\n" "$(basename "$0")" >&2
	exit 1
fi

for file in "$@"; do
	if [ ! -r "$file" ]; then
		printf "%s is not readable\n" "$file" >&2
		exit 1
	fi
done

IFS='
'
# shellcheck disable=SC2046
set -- $(realpath "$@")
IFS=

diff_add() {
	diff="$(mktemp)"
	diff -ru "$1" "$2" > "$diff" || true

	inotifywait -qmr -e modify "$1" "$2" | while read -r _; do
		diff -ru "$1" "$2" > "$diff" || true
	done &

	diffs="$diffs$diff\n"
}

finish() {
	jobs -p | xargs -r kill > /dev/null 2>&1
	printf "%b" "$diffs" | tr '\n' '\0' | xargs -0r rm
	exit
}
trap finish EXIT INT TERM

for file1 in "$@"; do
	for file2 in "$@"; do
		if [ "$file1" = "$file2" ]; then continue; fi
		diff_add "$file1" "$file2"
	done
done

# please printf "%1" "foo" "bar"
kakexp="$(
	printf '%b' "$diffs" | tr '\n' '\0' | xargs -0I{} printf '%s\0' '{}' '{}' |
		xargs -0 printf 'set buffer=%s autoreload yes;set buffer=%s filetype diff;'
)"

IFS='
'
# shellcheck disable=SC2046
set -- $(printf "%b" "$diffs")
IFS=

kak -e "$kakexp" "$@" &
wait $!
