#!/usr/bin/env bash

modes=1
notify=dunstify

if [[ ! -f "/tmp/wacom_current" ]]; then
	currentMode=0
else
	currentMode=$(cat /tmp/wacom_current)
	if [[ $currentMode < $modes ]]; then
		((currentMode++))
	else
		currentMode=0
	fi
fi

echo "$currentMode" > /tmp/wacom_current

# get devices
devices=$(xsetwacom --list devices)

# set pen to correct display
# "HEAD" only for NVIDIA drivers, otherwise use HDMI"
if [[ $devices == *"Wacom Intuos BT M Pen stylus"* ]]; then
	xsetwacom --set "Wacom Intuos BT M Pen stylus" MapToOutput HEAD-0
fi

if [[ ! $devices == *"Wacom Express Key Remote Pad pad"* ]]; then
	exit
fi

case $currentMode in
	0)
		# krita
		xsetwacom set "Wacom Express Key Remote Pad pad" "Button" "1" "key super alt shift ctrl w" # change mode
		xsetwacom set "Wacom Express Key Remote Pad pad" "Button" "2" "key ctrl z" # undo
		xsetwacom set "Wacom Express Key Remote Pad pad" "Button" "3" "key shift"
		xsetwacom set "Wacom Express Key Remote Pad pad" "Button" "8" "key ctrl"
		xsetwacom set "Wacom Express Key Remote Pad pad" "Button" "9" "key ctrl shift z" # redo
		xsetwacom set "Wacom Express Key Remote Pad pad" "Button" "10" "key 5" # reset rotation
		xsetwacom set "Wacom Express Key Remote Pad pad" "Button" "11" "key b" # tool: brush
		xsetwacom set "Wacom Express Key Remote Pad pad" "Button" "12" "key insert" # add layer
		xsetwacom set "Wacom Express Key Remote Pad pad" "Button" "13" "key PgUp" # move to layer above
		xsetwacom set "Wacom Express Key Remote Pad pad" "Button" "14" "key p" # tool: freehand select
		xsetwacom set "Wacom Express Key Remote Pad pad" "Button" "15" "key shift del" # delete layer
		xsetwacom set "Wacom Express Key Remote Pad pad" "Button" "16" "key PgDn" # move to layer below
		xsetwacom set "Wacom Express Key Remote Pad pad" "Button" "17" "key e" # toggle eraser
		xsetwacom set "Wacom Express Key Remote Pad pad" "Button" "18" ""
		xsetwacom set "Wacom Express Key Remote Pad pad" "Button" "19" ""
		xsetwacom set "Wacom Express Key Remote Pad pad" "Button" "20" ""
		xsetwacom set "Wacom Express Key Remote Pad pad" "Button" "21" "key [" # decrease brush radius
		xsetwacom set "Wacom Express Key Remote Pad pad" "Button" "22" "key ]" # increase brush radius
		xsetwacom set "Wacom Express Key Remote Pad pad" "AbsWheelUp" ""
		xsetwacom set "Wacom Express Key Remote Pad pad" "AbsWheelDown" ""
		$notify "Remote \"Krita 1\" Selected"
		;;
	1)
		xsetwacom set "Wacom Express Key Remote Pad pad" "AbsWheelUp" "key [" # decrease brush radius
		xsetwacom set "Wacom Express Key Remote Pad pad" "AbsWheelDown" "key ]" # increase brush radius
		$notify "Remote: \"Krita 2\" Selected"
		;;
	2)
		# obs
		xsetwacom set "Wacom Express Key Remote Pad pad" "Button" "2" ""
		xsetwacom set "Wacom Express Key Remote Pad pad" "Button" "3" ""
		xsetwacom set "Wacom Express Key Remote Pad pad" "Button" "8" ""
		xsetwacom set "Wacom Express Key Remote Pad pad" "Button" "9" ""
		xsetwacom set "Wacom Express Key Remote Pad pad" "Button" "10" ""
		xsetwacom set "Wacom Express Key Remote Pad pad" "Button" "11" ""
		xsetwacom set "Wacom Express Key Remote Pad pad" "Button" "12" "key super shift +" # start recording
		xsetwacom set "Wacom Express Key Remote Pad pad" "Button" "13" ""
		xsetwacom set "Wacom Express Key Remote Pad pad" "Button" "14" ""
		xsetwacom set "Wacom Express Key Remote Pad pad" "Button" "15" "key super shift -" # stop recording
		xsetwacom set "Wacom Express Key Remote Pad pad" "Button" "16" ""
		xsetwacom set "Wacom Express Key Remote Pad pad" "Button" "17" ""
		xsetwacom set "Wacom Express Key Remote Pad pad" "Button" "18" ""
		xsetwacom set "Wacom Express Key Remote Pad pad" "Button" "19" ""
		xsetwacom set "Wacom Express Key Remote Pad pad" "Button" "20" "key super shift /" # split recording
		xsetwacom set "Wacom Express Key Remote Pad pad" "Button" "21" ""
		xsetwacom set "Wacom Express Key Remote Pad pad" "Button" "22" "key super +" # save replay
		xsetwacom set "Wacom Express Key Remote Pad pad" "AbsWheelUp" ""
		xsetwacom set "Wacom Express Key Remote Pad pad" "AbsWheelDown" ""
		$notify "Remote: \"OBS\" Selected"
		;;
	*)
		xsetwacom set "Wacom Express Key Remote Pad pad" "Button" "1" ""
		xsetwacom set "Wacom Express Key Remote Pad pad" "Button" "2" ""
		xsetwacom set "Wacom Express Key Remote Pad pad" "Button" "3" ""
		xsetwacom set "Wacom Express Key Remote Pad pad" "Button" "8" ""
		xsetwacom set "Wacom Express Key Remote Pad pad" "Button" "9" ""
		xsetwacom set "Wacom Express Key Remote Pad pad" "Button" "10" ""
		xsetwacom set "Wacom Express Key Remote Pad pad" "Button" "11" ""
		xsetwacom set "Wacom Express Key Remote Pad pad" "Button" "12" ""
		xsetwacom set "Wacom Express Key Remote Pad pad" "Button" "13" ""
		xsetwacom set "Wacom Express Key Remote Pad pad" "Button" "14" ""
		xsetwacom set "Wacom Express Key Remote Pad pad" "Button" "15" ""
		xsetwacom set "Wacom Express Key Remote Pad pad" "Button" "16" ""
		xsetwacom set "Wacom Express Key Remote Pad pad" "Button" "17" ""
		xsetwacom set "Wacom Express Key Remote Pad pad" "Button" "18" ""
		xsetwacom set "Wacom Express Key Remote Pad pad" "Button" "19" ""
		xsetwacom set "Wacom Express Key Remote Pad pad" "Button" "20" ""
		xsetwacom set "Wacom Express Key Remote Pad pad" "Button" "21" ""
		xsetwacom set "Wacom Express Key Remote Pad pad" "Button" "22" ""
		xsetwacom set "Wacom Express Key Remote Pad pad" "AbsWheelUp" ""
		xsetwacom set "Wacom Express Key Remote Pad pad" "AbsWheelDown" ""
		;;
esac
