#!/bin/sh
# dmode — Display mode selector via dmenu
# Switches picom shaders for different visual modes

STATE_FILE="/tmp/display_mode_state"
SHADER_DIR="$HOME/.config/picom/shaders"
PICOM_CONF="$HOME/.config/picom.conf"

current_mode="Normal"
[ -f "$STATE_FILE" ] && current_mode=$(cat "$STATE_FILE")

# Apply a shader (kill picom, restart with shader)
apply_mode() {
	shader="$1"
	label="$2"
	pkill -x picom
	sleep 0.5
	if [ -z "$shader" ]; then
		picom --config "$PICOM_CONF" -b
	else
		picom --config "$PICOM_CONF" --window-shader-fg "$shader" -b
	fi
	echo "$label" > "$STATE_FILE"
	notify-send "Display Mode" "$label"
}

# Main menu
choice=$(printf '%s\n' \
	"  Normal" \
	"  Reading Mode" \
	"  Cinematic Mode" \
	"  Focus Mode" \
| dmenu -i -l 5 -p "  Mode [$current_mode]:")

[ -z "$choice" ] && exit 0

case "$choice" in
	*Normal*)
		apply_mode "" "Normal"
		;;
	*Reading*)
		apply_mode "$SHADER_DIR/reading_mode.glsl" "Reading Mode"
		;;
	*Focus*)
		apply_mode "$SHADER_DIR/focus_mode.glsl" "Focus Mode"
		;;
	*Cinematic*)
		# Nested submenu for film types
		film=$(printf '%s\n' \
			"  Technicolor (1930s-60s)" \
			"  Film Noir (1940s-50s)" \
			"  Kodachrome (1960s-70s)" \
			"  70mm Epic (1960s-70s)" \
			"  Faded Film (1970s-80s)" \
		| dmenu -i -l 5 -p "  Film Type:")

		[ -z "$film" ] && exit 0

		case "$film" in
			*Technicolor*)  apply_mode "$SHADER_DIR/technicolor.glsl" "Cinematic: Technicolor" ;;
			*Noir*)         apply_mode "$SHADER_DIR/film_noir.glsl" "Cinematic: Film Noir" ;;
			*Kodachrome*)   apply_mode "$SHADER_DIR/kodachrome.glsl" "Cinematic: Kodachrome" ;;
			*70mm*)         apply_mode "$SHADER_DIR/epic_70mm.glsl" "Cinematic: 70mm Epic" ;;
			*Faded*)        apply_mode "$SHADER_DIR/faded_film.glsl" "Cinematic: Faded Film" ;;
		esac
		;;
esac
