#!/bin/env zsh

volume() {
	pactl get-sink-volume @DEFAULT_SINK@ | rg 'Volume: front-left:\s+\d+\s+/\s+(\d+)%' -or '$1' --color=never
}

mute() {
	if [[ "$(pactl get-sink-mute @DEFAULT_SINK@)" =~ 'yes' ]]; then
		echo "true"
	else
		echo "false"
	fi
}

get_device_id() {
	~/.config/eww/scripts/get-audio-device-id "$1"
}

HEADPHONES=""
HEADPHONES_ICON='󰋋'
SPEAKERS=""
SPEAKERS_ICON='󰓃'
HEADPHONE_MIC=""
HEADPHONE_MIC_ICON='󰋎'
BLUE_MIC=""
BLUE_MIC_ICON=''
UNKNOWN_ICON='?'

get_ids() {
	HEADPHONES="$(get_device_id 'headphones')"
	SPEAKERS="$(get_device_id 'speakers')"
	HEADPHONE_MIC="$(get_device_id 'headphone_mic')"
	BLUE_MIC="$(get_device_id 'blue_mic')"
}

audio_sink() {
	case "$(pactl get-default-sink)" in
		"$HEADPHONES") echo "$HEADPHONES_ICON"
		;;
		"$SPEAKERS") echo "$SPEAKERS_ICON"
		;;
		*) echo "$UNKNOWN_ICON"
		;;
	esac
}

audio_source() {
	case "$(pactl get-default-source)" in
		"$HEADPHONE_MIC") echo "$HEADPHONE_MIC_ICON"
		;;
		"$BLUE_MIC") echo "$BLUE_MIC_ICON"
		;;
		*) echo "$UNKNOWN_ICON"
		;;
	esac
}

audio() {
	echo "{\"volume\":$(volume),\"muted\":$(mute),\"sink\":\"$(audio_sink)\",\"source\":\"$(audio_source)\"}"
}

get_ids
audio
sleep 3
get_ids
audio
pactl subscribe | while read -r LINE; do
	if [[ "$LINE" =~ 'change' ]]; then
		audio
		get_ids
	fi
done
