#!/bin/bash

echo "profile {" > /tmp/kanshi-profile

OUTPUT=
OUTPUTS=
VALID=0
while IFS= read LINE; do
	case "$LINE" in
		"  Make:"*)
			read -r _ MAKE <<< "$LINE"
			;;
		"  Model:"*)
			read -r _ MODEL <<< "$LINE"
			;;
		"  Serial:"*)
			read -r _ SERIAL <<< "$LINE"
			[ "$SERIAL" = "(null)" ] && SERIAL="Unknown"
			;;
		"  Enabled:"*)
			read -r _ ENABLED <<< "$LINE"
			;;
		"    "*x*" px, "*" Hz ("*"current)")
			read -r RES _ HZ _ <<< "$LINE"
			MODE="${RES}@${HZ}"
			;;
		"  Position:"*)
			read -r _ POS <<< "$LINE"
			;;
		"  Transform:"*)
			read -r _ TRANS <<< "$LINE"
			;;
		"  Scale:"*)
			read -r _ SCALE <<< "$LINE"
			;;
		"  Adaptive Sync:"*)
			read -r _ _ ASYNC <<< "$LINE"
			;;
		" "*)
			;;
		*)
			if [ -n "$OUTPUT" ]; then
				if [ -n "$MAKE" -a -n "$MODEL" ]; then
					OUTPUT="\"${MAKE} ${MODEL} ${SERIAL}\""
				fi

				if [ "$ENABLED" = no ]; then
					echo "	output ${OUTPUT} disable"
				else
					echo -n "	output ${OUTPUT}"
					[ -n "$MODE" ] && echo -n " mode --custom ${MODE}"
					[ -n "$POS" ] && echo -n " position ${POS}"
					[ -n "$TRANS" ] && echo -n " transform ${TRANS}"
					if [ -n "$SCALE" ]; then
						SCALE=$(printf "%.2f" $SCALE)
						SCALE="${SCALE%?}0" # round down to single decimal for consistent icon grid
						echo -n " scale ${SCALE}"
					fi
					if [ "$ASYNC" = enabled ]; then
						echo -n " adaptive_sync on"
					else
						echo -n " adaptive_sync off"
					fi
					echo
					VALID=1
				fi

				if [ -z "$OUTPUTS" ]; then
					OUTPUTS="${OUTPUT}"
				else
					OUTPUTS="${OUTPUTS}|${OUTPUT}"
				fi
			fi

			OUTPUT="${LINE%% *}"
			[ "$OUTPUT" = EOF ] && break

			MAKE=
			MODEL=
			SERIAL=
			ENABLED=
			MODE=
			POS=
			TRANS=
			SCALE=
			ASYNC=
			;;
	esac
done < <(wlr-randr; echo EOF) >> /tmp/kanshi-profile

if [ $VALID -eq 0 ]; then
	rm -f /tmp/kanshi-profile
	exit
fi

echo "}" >> /tmp/kanshi-profile

HASH=`echo "$OUTPUTS" | tr '|' '\n' | sort | sum | awk '{print $1}'`

if ! cmp -s ${XDG_CONFIG_HOME}/kanshi/${HASH}.profile /tmp/kanshi-profile; then
	mkdir -p ${XDG_CONFIG_HOME}/kanshi
	mv -f /tmp/kanshi-profile ${XDG_CONFIG_HOME}/kanshi/${HASH}.profile
	killall -HUP kanshi
else
	rm -f /tmp/kanshi-profile
fi
