function monitor() {
	notify_short
	toggle() {
		local output=$(swaymsg -t get_outputs | jq -r '.[] | select(.focused) | .name')
		local state=$(swaymsg -t get_outputs | jq -r '.[] | select(.focused) | .power')

		if ${state}; then
			swaymsg "output \"${output}\" power off"
		else
			swaymsg "output \"${output}\" power on"
		fi

		pkill -RTMIN+4 waybar
	}
	_sway_iterate_sockets toggle
}

function monitorreset() {
	swaymsg 'output * power on'
	pkill -RTMIN+4 waybar
}

function gaming() {
	notify_short
	toggle() {
		local output=$(swaymsg -t get_outputs | jq -r '.[] | select(.focused) | .name')
		local state=$(swaymsg -t get_outputs | jq -r '.[] | select(.focused) | .adaptive_sync_status')

		if [[ ${state} == "disabled" ]]; then
			swaymsg "output \"${output}\" adaptive_sync on"
		else
			swaymsg "output \"${output}\" adaptive_sync off"
		fi

		pkill -RTMIN+4 waybar
	}
	_sway_iterate_sockets toggle
}

function gamingreset() {
	swaymsg 'output * adaptive_sync off'
	pkill -RTMIN+4 waybar
}

function dnd() {
	toggle() {
		local state=$(makoctl mode)

		if [[ ${state} == "dnd" ]]; then
			makoctl mode -s default
			notify_short
		else
			notify_short
			makoctl mode -s dnd
		fi

		pkill -RTMIN+4 waybar
	}
	_sway_iterate_sockets toggle
}

# Reset the state of everything.
function displayreset() {
	notify_long
	[[ "$(monitorstate)" == "Y" ]] && monitorreset
	[[ "$(gamingstate)" == "Y" ]] && gamingreset
	[[ "$(recordingstate)" == "Y" ]] && pkill wf-recorder
	[[ "$(dndstate)" == "Y" ]] && dnd
	true
}

# Waybar output.
function displaywidget() {
	local _monitorstate=$(monitorstate)
	local _gamingstate=$(gamingstate)
	local _recordingstate=$(recordingstate)
	local _dndstate=$(dndstate)
	local class=""

	if [[ ${_monitorstate} == "Y" ]] || [[ ${_gamingstate} == "Y" ]] || [[ ${_recordingstate} == "Y" ]] || [[ ${_dndstate} == "Y" ]]; then
		class="modified"
	fi

	printf "%s" "{\"text\": \"󰍹\", \"tooltip\": \"󰍶 ${_dndstate}\\t󰶐 ${_monitorstate}\\n󰡈 ${_gamingstate}\\t󰻂 ${_recordingstate}\", \"class\": \"${class}\"}\n"
}

function monitorstate() {
	local outputs=($(swaymsg -t get_outputs | jq -r '.[] | .power'))

	for state in "${outputs[@]}"; do
		${state} || {
			printf "%s" Y
			return 1
		}
	done

	printf "%s" n
	return 0
}

function recordingstate() {
	[[ "$(ps cax | rg wf-recorder)" == "" ]] && printf "%s" n || printf "%s" Y
}

function dndstate() {
	[[ "$(makoctl mode)" == "dnd" ]] && printf "%s" Y || printf "%s" n
}

function gamingstate() {
	local outputs=($(swaymsg -t get_outputs | jq -r '.[] | .adaptive_sync_status'))

	for state in "${outputs[@]}"; do
		[[ ${state} == "disabled" ]] || {
			printf "%s" Y
			return 1
		}
	done

	printf "%s" n
	return 0
}