#!/usr/bin/bash
#shellcheck disable=SC1090

. "$(sfpath)" || exit 3

shellfu import pretty

shellfu import saturnin


usage() {
    mkusage "$@" \
            "up"     \
            "down"   \
            "flip"   \
            "mute"   \
            "query is_muted" \
            "unmute"
}


sound_is_muted() {
    #
    # At least one playback channel is muted
    #
    local master_status
    master_status="$(amixer get Master)"
    echo "$master_status" \
      | grep "Playback channels" \
      | sed -e 's/.*: //; s/ - /\n/' \
      | while read -r chname
        do
            grep -e "^ *$chname" <<<"$master_status"
        done \
      | grep -qse '\[off\]$'
}

do_down() {
    #
    # turn volume down
    #
    amixer -q sset Master 5%-
}

do_flip() {
    #
    # mute or unmute
    #
    if sound_is_muted;
    then
        do_unmute
    else
        do_mute
    fi
}

do_mute() {
    #
    # mute
    #
    amixer -q sset Master mute
}

do_query() {
    #
    # Query properties
    #
    local query="$1"
    debug -v query
    case "$query" in
        is_muted) sound_is_muted; return $? ;;
        *)        usage -w "unknown query: $query" ;;
    esac
}

do_up() {
    #
    # turn volume up
    #
    amixer -q sset Master 5%+
}

do_unmute() {
    #
    # mute
    #
    amixer -q sset Master unmute
}


action=
while true; do case "$1" in
    up)     action=up;     shift ;;
    down)   action=down;   shift ;;
    flip)   action=flip;   shift ;;
    mute)   action=mute;   shift ;;
    query)  action=query;  shift ; break ;;
    unmute) action=unmute; shift ;;
    "")     break                ;;
    *)      usage -w "unknown argument: $1"  ;;
esac done

debug "\$*='$*'"
debug -v action

case $action in
    up|down|flip|mute|query|unmute)
        saturnin__wraphook "do_$action" "$@"
        ;;
    *)
        usage -w "unknown action: $action"
        ;;
esac
