#!/usr/bin/env zsh

PANEL_FIFO="$1"
PREFIX="$2"
ICONS=($(echo "$3" | tr ";" "\n"))

exec 5>"$PANEL_FIFO"

main() {
    local cmd=( $(amixer -M get Master) )
    local playback_level="${cmd[-2][2,-3]}"
    local icon=""

    if [[ "${cmd[-1]}" == "[off]" ]]; then
        icon="${ICONS[1]}"
    else
        if [[ "$playback_level" -eq 0 ]]; then
            icon="${ICONS[2]}"
        elif [[ "$playback_level" -lt 30 ]]; then
            icon="${ICONS[3]}"
        elif [[ "$playback_level" -lt 60 ]]; then
            icon="${ICONS[4]}"
        elif [[ "$playback_level" -lt 100 ]]; then
            icon="${ICONS[5]}"
        else
            icon="${ICONS[6]}"
        fi
    fi

    REPLY="$icon $playback_level%"
}

{print init; stdbuf -oL alsactl monitor pulse} | while read line; do
    case ${line} in
        *Master\ Playback*|init ) main; print "$PREFIX $REPLY" >&5 ;;
        * ) continue ;;
    esac
done