#!/bin/bash

list_sinks_with_details() {
    pactl list sinks | awk '
    BEGIN {
        sink_id = ""; sink_name = ""; desc = ""
    }
    /^Sink / {
        if (sink_id != "" && desc != "Ignore") {
            print sink_id"\t"desc
        }
        sink_id = $2;
        sink_name = "";
        desc = "";
    }
    /Name:/ {
        gsub(/Name: /, "", $0);
        sink_name = $0
    }
    /device.description =/ {
        gsub(/.*device.description = "/, "", $0);
        gsub(/"$/, "", $0);
        desc = $0
    }
    END {
    if (sink_id != "" && desc != "Ignore") {
            print sink_id"\t"desc
        }
    }'
}

SELECTED=$(list_sinks_with_details | column -t -s $'\t' | fzf --height=~100%)

if [ -z "$SELECTED" ]; then
    echo "No sink selected."
    exit 1
fi

SELECTED_SINK_ID=$(echo "$SELECTED" | awk '{print $1}')
SELECTED_SINK_NAME=$(pactl list sinks | awk -v id="$SELECTED_SINK_ID" '
  BEGIN { sink_id = ""; sink_name = "" }
  /^Sink / { sink_id = $2 }
  /Name:/ { gsub(/Name: /, "", $0); if (sink_id == id) sink_name = $0 }
  END { print sink_name }
')

# if the selected sink name is a bluez output, then its bluetooth.
# prompt the user to choose a card profile.
# TODO

# Set the default sink
pactl set-default-sink $SELECTED_SINK_NAME
echo "Sink $SELECTED_SINK_NAME set as default."