#!/bin/bash
CACHE_DIR="$HOME/.cache/audio-control"

[ "$#" -eq 0 ] &&
	echo "Requires a command. Run with 'help' for a list of commands." &&
	exit 1
[ "$#" -gt 1 ] &&
	echo "Too many arguments. Run with 'help' for a list of commands." &&
	exit 1

[ -d $CACHE_DIR ] ||
	mkdir -p $CACHE_DIR

query_outport() {
	active_port="$(pactl list sinks | grep 'Active Port')"
	if [[ $active_port == *"speaker"* ]]
	then
		echo "SPK" > $CACHE_DIR/port
	else
		echo "HDF" > $CACHE_DIR/port
	fi
	pactl list sinks | awk '/Mute/ { if ($2 == "no") print "VOL"; else print "MUT"; }' > $CACHE_DIR/vol_status
	pactl list sinks | grep '^[[:space:]]Volume:' | head -n $(( $SINK + 1  )) | tail -n 1 | sed -e 's,.* \([0-9][0-9]*\)%.*,\1,' > $CACHE_DIR/vol_level
}

case $1 in
	"mute")
		pactl set-sink-mute 0 toggle
		pactl list sinks | awk '/Mute/ { if ($2 == "no") print "VOL"; else print "MUT"; }' > $CACHE_DIR/vol_status;;
	"vol-up")
		pactl set-sink-volume 0 +5%
		pactl list sinks | grep '^[[:space:]]Volume:' | head -n $(( $SINK + 1  )) | tail -n 1 | sed -e 's,.* \([0-9][0-9]*\)%.*,\1,' > $CACHE_DIR/vol_level;;
	"vol-down")
		pactl set-sink-volume 0 -5%
		pactl list sinks | grep '^[[:space:]]Volume:' | head -n $(( $SINK + 1  )) | tail -n 1 | sed -e 's,.* \([0-9][0-9]*\)%.*,\1,' > $CACHE_DIR/vol_level;;
	"reset")
		pactl set-sink-volume 0 50%
		pactl list sinks | grep '^[[:space:]]Volume:' | head -n $(( $SINK + 1  )) | tail -n 1 | sed -e 's,.* \([0-9][0-9]*\)%.*,\1,' > $CACHE_DIR/vol_level;;
	"toggle-port")
		query_outport;;
	"help")
		echo "USAGE: audio-control <command>

Commands:
	mute          toggle mute
	vol-up        raise the volume
	vol-down      lower the volume
	reset         reset volume (to round number)
	toggle-port   toggle the output port
	help          show this help information";;
	*)
		echo "Invalid command. Run with 'help' for a list of commands."
		exit 1;;
esac