#!/usr/bin/env nix-shell
#!nix-shell -i sh -p socat jq

ws_media="[08]"
ws_voip="[09]"

ws_media_at="[ 0, 0 ]"

_handler_check_ws_media_empty() {

	# split at ">>" and get the second part and take first part of that
	win_id=$(echo "$1" | cut -d'>' -f3 | cut -d',' -f1)

	event_on_media="false"

	moved_from_media=$(hyprctl clients -j | jq ".[] | select(.address == \"0x$win_id\") | .workspace.name == \"$ws_media\"")
	closed_on_media=$(hyprctl clients -j | jq ".[] | select(.address == \"0x$win_id\") | .at == $ws_media_at")

	if [ "$moved_from_media" == "true" ] || [ "$closed_on_media" == "true" ]; then
		event_on_media="true"
	fi

	has_zero_windows=$(hyprctl workspaces -j | jq ".[] | select(.name == \"$ws_media\") | .windows == 0")

	if [ "$has_zero_windows" == "true" ] && [ "$event_on_media" == "true" ]; then
		hyprctl dispatch workspace "$ws_voip"
	fi

}

handle() {
	case $1 in
		movewindow*) _handler_check_ws_media_empty "$1" ;;
		closewindow*) _handler_check_ws_media_empty "$1" ;;
	esac
}

socat -U - "UNIX-CONNECT:/tmp/hypr/$HYPRLAND_INSTANCE_SIGNATURE/.socket2.sock" | while read -r line; do handle "$line"; done