#!/bin/sh
#pacmd set-default-sink alsa_output.usb-Logitech_Logitech_G933_Gaming_Wireless_Headset-00.analog-stereo
#pacmd set-default-source alsa_input.usb-Logitech_Logitech_G933_Gaming_Wireless_Headset-00.analog-mono

set -e

QUDELIX_SINK="alsa_output.usb-QTIL_Qudelix-5K_USB_DAC_ABCDEF0123456789-00.analog-stereo"
SPEAKER_SINK="alsa_output.pci-0000_0f_00.4.3.iec958-stereo"
STAGE_SINK="alsa_output.usb-ACTIONS_Stage_V2-00.analog-stereo"
BOSE_SINK="bluez_output.78_2B_64_CE_04_03.1"
FRACTAL_SINK="alsa_output.usb-Fractal_Fractal_Scape_Dongle_00000000911AD5560372-00.analog-stereo"
SNAPCAST_SINK="snapcast_out"
YETI_SOURCE="alsa_input.usb-Blue_Microphones_Yeti_Nano_2231SQ0017G8_888-000476140106-00.analog-stereo"
NOISETORCH_SOURCE="NoiseTorch Microphone for Yeti Nano"
FRACTAL_SOURCE="alsa_input.usb-Fractal_Fractal_Scape_Dongle_00000000911AD5560372-00.mono-fallback"

switchAudio() {
    case "$1" in
        "-s")
	        #echo fractal
          echo -e "fractal\0icon\x1faudio-headphones"
	        #echo snapcast
          echo -e "snapcast"
          #echo -en "Firefox\0icon\x1ffirefox" | fuzzel --dmenu
          echo -e "stage\0icon\x1faudio-speakers"
          #echo "stage"
          echo -e "bose\0icon\x1fbluetooth"
          #echo "qudelix"
          echo -e "qudelix\0icon\x1faudio-headphones"
          exit 0;
        ;;
        "qudelix")
            local sink="$QUDELIX_SINK"
#           local source="$NOISETORCH_SOURCE"
            local source="$YETI_SOURCE"
        ;;
        "speakers")
            local sink="$SPEAKER_SINK"
            local source="$YETI_SOURCE"
        ;;
        "stage")
            local sink="$STAGE_SINK"
            local source="$YETI_SOURCE"
        ;;
        "bose")
            local sink="$BOSE_SINK"
            local source="$YETI_SOURCE"
        ;;
        "fractal")
            local sink="$FRACTAL_SINK"
            local source="$FRACTAL_SOURCE"
        ;;
        "snapcast")
            local sink="$SNAPCAST_SINK"
            local source="$FRACTAL_SOURCE"
        ;;
    esac;

    local sourceCommand="pactl move-source-output {} $source"
    local sinkCommand="pactl move-sink-input {} $sink"

    pactl set-default-sink $sink
    pactl list | grep -o -E 'Sink Input #([0-9]+)' | cut -d"#" -f2 | xargs -I '{}' $sinkCommand
    #pactl list | grep -o -E 'Source Output #([0-9]+)' | cut -d"#" -f2 | xargs -I '{}' $sourceCommand
    pactl set-default-source $source
    echo $1 > $HOME/.last_audio
    notify-send -a "Audio" "Switched to $1"

}

nextAudio() {
    local last_audio=$(cat $HOME/.last_audio)
    case "$last_audio" in
        "fractal")
            local next="speakers"
        ;;
        "speakers")
            local next="fractal"
        ;;
        *)
            local next="fractal"
        ;;
    esac;

    switchAudio $next
}

case "$1" in
  "next")
    nextAudio
  ;;
  *)
    switchAudio $1
  ;;
esac;
