#!/usr/bin/env bash

BATT="/sys/class/power_supply/BAT0"
LOW=10
CRIT=3
LASTSTATE="$HOME/.cache/batteryState"

function setState() { # state [...notify-send arguments]
    state="$1"
    last="$(cat "$LASTSTATE" 2> /dev/null)"
    shift

    echo "Battery state: $state"

    if [ "$state" != "$last" ]
    then
        notify-send "$@"
        echo "$state" > "$LASTSTATE"
    fi
}

function computeState() {
    acpiStatus="$(cat "$BATT/status")"
    acpiCapacity="$(cat "$BATT/capacity")"

    if [ "$acpiStatus" == "Discharging" ]
    then
        if [ $acpiCapacity -le $CRIT ]
        then
            setState "CRIT" -u critical -i battery-caution "Battery level is critical" "$acpiCapacity %"
        elif [ $acpiCapacity -le $LOW ]
        then
            setState "LOW" -u critical -i battery-low "Battery level is low" "$acpiCapacity %"
        else
            setState "DISCHARGING" -i battery-good "Battery is discharging" "$acpiCapacity %"
        fi
    elif [ "$acpiStatus" == "Charging" ]
    then
        setState "CHARGING" -u normal -i battery-good-charging "Battery is charging" "$acpiCapacity %"
    elif [ "$acpiStatus" == "Full" ]
    then
        setState "FULL" -u low -i battery-full-charged "Battery is full" "$acpiCapacity %"
    fi
}

if [ "$1" == "-d" ]
then
    while true
    do
        computeState
        sleep 10
    done
else
    computeState
fi