#!/bin/sh
# Cambia el volumen o silencia la salida o el micro (PipeWire), refresca
# slstatus y lo muestra en una notificación que se sustituye a sí misma.
# "salida" elige con dmenu por dónde suena (altavoces, cascos...).
# Uso: volumen subir|bajar|silenciar|micro|salida

case $1 in
subir)     wpctl set-volume -l 1.0 @DEFAULT_AUDIO_SINK@ 5%+ ;;
bajar)     wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%- ;;
silenciar) wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle ;;
micro)     wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle ;;
salida)
	# Las salidas de "wpctl status" (sección Sinks de Audio), con * la actual:
	# " │  *   86. Nombre [vol: 0.50]" -> "* 86. Nombre"
	s=$(wpctl status | awk '
		/Sinks:/ { dentro = 1; next }
		dentro && !/[0-9]\./ { exit }
		dentro {
			sub(/^[^*0-9]*/, ""); actual = sub(/^\* */, "")
			sub(/ *\[vol:.*/, ""); print (actual ? "* " : "  ") $0
		}' | menu -p Salida:)
	[ -n "$s" ] || exit 0
	s=${s#??}
	wpctl set-default "${s%%.*}"
	exec notify-send -t 2000 -h string:x-dunst-stack-tag:volumen \
		-i audio-speakers "Salida de audio" "${s#*. }"
	;;
*)         echo "uso: volumen subir|bajar|silenciar|micro|salida" >&2; exit 1 ;;
esac

pkill -USR1 -x slstatus

if [ "$1" = micro ]; then
	if wpctl get-volume @DEFAULT_AUDIO_SOURCE@ | grep -q MUTED; then
		icono=microphone-sensitivity-muted texto="Silenciado"
	else
		icono=microphone-sensitivity-high texto="Activado"
	fi
	exec notify-send -t 2000 -h string:x-dunst-stack-tag:micro \
		-i "$icono" "Micrófono" "$texto"
fi

# wpctl get-volume da algo como "Volume: 0.35 [MUTED]"
estado=$(wpctl get-volume @DEFAULT_AUDIO_SINK@)
vol=$(echo "$estado" | awk '{ printf "%d", $2 * 100 + 0.5 }')
case $estado in
*MUTED*) icono=audio-volume-muted texto="Silenciado" ;;
*)
	if [ "$vol" -eq 0 ]; then icono=audio-volume-muted
	elif [ "$vol" -lt 34 ]; then icono=audio-volume-low
	elif [ "$vol" -lt 67 ]; then icono=audio-volume-medium
	else icono=audio-volume-high
	fi
	texto="$vol %"
	;;
esac
exec notify-send -t 2000 -h string:x-dunst-stack-tag:volumen \
	-h "int:value:$vol" -i "$icono" "Volumen" "$texto"
