#!/bin/bash
SOURCE="$0"
source /usr/lib/elive-tools/functions
EL_REPORTS="1"
el_make_environment
# . gettext.sh
# TEXTDOMAIN="elive-tools"
# export TEXTDOMAIN

# Lock system (good one) {{{
lockfile="/tmp/.$(basename $0)-${USER}.lock"

if [[ -r "$lockfile" ]] ; then
    PROCCESS="$(cat $lockfile)"
else
    PROCCESS=" "
fi
if (ps up $PROCCESS) 1>/dev/null 2>&1 ; then
    #el_error "$(basename $0) already running"
    exit
else
    echo $$ > "$lockfile"
fi

# SET the lock file
echo "$$" > "$lockfile"


# end lock system }}}

error_show() {
    local devices
    devices="$( brightnessctl -l | awk 'BEGIN {RS=""; FS="\n"} !/class.*leds/ {print $0}' )"

    if [[ -n "$devices" ]]; then
        el_error "Error: Failed to adjust brightness. Available devices are:\n$devices"
    else
        el_error "Error: Failed to adjust brightness. - No devices found."
    fi

    exit 1
}

main(){
    # Check if the first argument is provided
    if [ -z "$1" ]; then
        echo "Usage: $( basename $0 ) {up|down}"
        exit 1
    fi

    # Get the current brightness level in percentage and raw integer value
    current_brightness="$(brightnessctl -m i)"
    current_brightness_percent="$(echo "$current_brightness" | awk -F',' '{print $4}' | tr -d '%')"
    current_brightness_value="$(echo "$current_brightness" | awk -F',' '{print $3}')"

    # Get the maximum brightness value
    max_brightness="$(echo "$current_brightness" | awk -F',' '{print $5}')"
    # Calculate the number of steps based on the maximum brightness value
    brightness_steps="$(($max_brightness / 5))"

    # Define the increment based on the current brightness percentage
    if [ "$current_brightness_percent" -ge 10 ]; then
        increment=5
    else
        increment=1
    fi

    el_debug "Current brightness: $current_brightness_percent% ($current_brightness_value), Increment assigned to: $increment"

    # Adjust the brightness based on the argument provided (up or down)
    if [ "$1" = "up" ]; then
        if [ "$increment" -eq 1 ]; then
            # Special case: Adjust brightness directly based on integer value
            brightness="$(( $current_brightness_value * 2 ))"
            [[ "$brightness" = "-"* ]] && brightness=1
            [[ "$brightness" = "0" ]] && brightness=1
            el_debug "set brightness as int $brightness"
            if ! sudo -n brightnessctl s $brightness ; then
                error_show
            fi
        else
            el_debug "set brightness as +${increment}%"
            if ! sudo -n brightnessctl s +${increment}% ; then
                error_show
            fi
        fi
    elif [ "$1" = "down" ]; then
        if [ "$increment" -eq 1 ]; then
            # Special case: Adjust brightness directly based on integer value
            [[ "$brightness" = "-"* ]] && brightness=1
            brightness="$(( $current_brightness_value / 2 ))"
            [[ $brightness -gt $brightness_steps ]] && brightness="$(( $brightness_steps / 2 ))"
            el_debug "set brightness as int $brightness"
            if ! sudo -n brightnessctl s $brightness ; then
                error_show
            fi
        else
            el_debug "set brightness as ${increment}%-"
            if ! sudo -n brightnessctl s ${increment}%- ; then
                error_show
            fi
        fi
    else
        echo "Invalid argument. Use 'up' or 'down'."
        exit 1
    fi

    if [[ -n "$EROOT" ]] ; then
        ( yad --no-focus --no-buttons --undecorated --text="<b>Brightness $(brightnessctl -m i | awk -F',' '{print $4}')</b>" --center --timeout=1 --image=display-brightness & )
    fi
}

#
#  MAIN
#
main "$@"

# vim: set foldmethod=marker :
