#!/bin/sh

notify() {
	notify-send -e -i "$icon_dir/$1" -h "string:x-canonical-private-synchronous:${0##*/}" "$2" -u "${3:-normal}"
}

print_sleep() {
	[ -n "$4" ] && printf "Status: %s, Charge: %s,Next Check in %s seconds\n" "$3" "$2" "$1"
	sleep "$1"
}

#declaration
battery="BAT0" #change accordingly
dir="/sys/class/power_supply/$battery/"
icon_dir="/usr/share/icons/Papirus-Dark/22x22/panel/" #change accordingly
i=0
status="normal"
charge=$(cat "$dir"/capacity)
power_status=$(cat "$dir"/status)

case "$1" in
    ac)
	notify "battery-$(( charge / 10))0-charging.svg" "Power: AC Mode ($charge % $power_status)"
        hyprctl keyword decoration:blur:enabled true
	hyprctl keyword decoration:shadow:enabled true
	exit 0
        ;;

    battery)
	notify "battery-$(( charge / 10))0.svg" "Power: Battery Mode ($charge % $power_status)"
        hyprctl keyword decoration:blur:enabled false
	hyprctl keyword decoration:shadow:enabled false
	exit 0
        ;;

    *) ;;
esac

#infinite loop
while charge=$(cat "$dir"/capacity); do
	if [ "$(cat "$dir"/status)" = "Charging" ]; then
		i=300 #default polling time, it's 5 minutes
	else
		case $charge in
			[2-9][0-9] | 100)
				i=300 # 5 minutes
				status="normal"
				;;
			[1-2][0-9])
				i=150 # 2.5 minutes
				status="low"
				;;
			[5-9])
				i=60 # every minute
				status="critical"
				;;
			[0-4])
				i=10 # every 10 seconds
				status="critical"
				;;
		esac

		# remind appropriately
		[ "$status" != "normal" ] && notify "battery-010.svg" "$charge % Battery $status, Please Plugin Charger!!" "$status"
	fi
	print_sleep "$i" "$charge" "$status" "$2" #pass 'log' as argument to print logs
done
