#!/bin/bash -eu

usage() {
    prog=$(basename "$0")
    echo "Usage:"
    echo "  $prog                     # get brightness"
    echo "  $prog <brightness>        # set all outputs to <brightness>"
    echo "  $prog <output> <brightness>  # set specific output to <brightness>"
    echo "  $prog <index> <brightness>   # set output at <index> to <brightness>"
    exit 1
}

outputs() {
    xrandr |
        sed -n '/ connected / { s/ connected .*//; p }'
}

get() {
    xrandr --verbose |
        grep -i -e '^[^ ].* connected ' -e Brightness |
        perl -pe 's/ connected .*\n//; s/Brightness: //'
}

set_brightness() {
    local output=$1 brightness=$2
    xrandr --output "$output" --brightness "$brightness"
}

if [ $# -eq 0 ]; then
    get
    exit 0
fi

if [ $# -eq 1 ] && [[ $1 =~ ^[0-9]+(\.[0-9]+)?$ ]]; then
    brightness=$1
    for output in $(outputs); do
        set_brightness "$output" "$brightness"
    done
elif [ $# -eq 2 ]; then
    output=$1
    brightness=$2
    if [[ $output =~ ^[0-9]+$ ]]; then
        outputs=($(outputs))
        output=${outputs[$output]}
    fi
    set_brightness "$output" "$brightness"
else
    usage
fi
