#!/bin/bash

brightness=$(brightnessctl i | grep -oP '\(\K[^%\)]+')
volume=$(pamixer --get-volume)
empty_battery="1"

volume_icon () {
    if [ $volume -lt "35" ]; then
        icon="󰖀"
    elif [ $volume -lt "70" ]; then
        icon="󰕾"
    else
        icon="󰕾"
    fi

    [ $(pamixer --get-mute) = "true" ] && icon="󰝟"

    echo $icon
}

brightness_icon () {
    if [ $brightness -lt "15" ]; then
        echo "󰃞"
    elif [ $brightness -lt "30" ]; then
        echo "󰃞"
    elif [ $brightness -lt "45" ]; then
        echo "󰃟"
    elif [ $brightness -lt "60" ]; then
        echo "󰃟"
    elif [ $brightness -lt "75" ]; then
        echo "󰃟"
    elif [ $brightness -lt "90" ]; then
        echo "󰃠"
    else
        echo "󰃠"
    fi
}

network_icon () {
    wifi_check=$(cat /sys/class/net/w*/operstate)
    ethernet_check=$(cat /sys/class/net/e*/operstate)
    wifi_strength=$(nmcli dev wifi list | awk '/\*/{if (NR!=1) {print $9}}')

    
	if [ $wifi_check = up ]; then 
        if [ $wifi_strength -lt "10" ]; then
            echo ""
        elif [ $wifi_strength -lt "25" ]; then
            echo ""
        elif [ $wifi_strength -lt "45" ]; then
            echo ""
        elif [ $wifi_strength -lt "65" ]; then
            echo ""
        elif [ $wifi_strength -lt "85" ]; then
            echo ""
        else
            echo ""
        fi
    elif [ $ethernet_check = up ]; then 
        echo ""
    else 
        echo ""
    fi
}

network_speed () {
    interface="$(ip link | awk '/state UP/ {print $2}' | tr -d :)"

    received_1=$(cat /sys/class/net/$interface/statistics/rx_bytes)
    transmitted_1=$(cat /sys/class/net/$interface/statistics/tx_bytes)

    received_2=$(cat /sys/class/net/$interface/statistics/rx_bytes)
    transmitted_2=$(cat /sys/class/net/$interface/statistics/tx_bytes)

    bandwidth_up=`expr $transmitted_2 - $transmitted_1`
    bandwidth_down=`expr $received_2 - $received_1`

    upspeed=$(expr $bandwidth_up / 1024)
    downspeed=$(expr $bandwidth_down / 1024)

    echo "$downspeed kB/s $upspeed kB/s"
}

network_name () {
    ssid=$(iwgetid -r)

    [ -z $ssid ] && echo "Not Connected" || echo "Connected to $ssid"
}


battery_empty () {
    if [ "$empty_battery" -gt 0 ]; then
	    if [ ! -f "$HOME/.cache/empty_battery_capacity" ]; then 
            echo $(($RANDOM % 100)) > "$HOME/.cache/empty_battery_capacity"
        fi
    fi
}

battery_icon () {
    if [[ -d /sys/class/power_supply/ACAD ]]; then
		echo ""
	elif [[ -d /sys/class/power_supply/BAT ]]; then
		if [[ $(cat /sys/class/power_supply/BAT/status) == "Discharging" ]]; then
			echo ""
		else
			echo ""
		fi
	else
		echo ""
	fi
}

battery_capacity () {
    if [ "$empty_battery" -gt 0 ]; then
		if [ -f "$HOME/.cache/empty_battery_capacity" ]; then
			echo $(cat "$HOME/.cache/empty_battery_capacity")
		fi
	elif [ -f /sys/class/power_supply/BAT0/capacity ]; then
		echo $(cat /sys/class/power_supply/BAT0/capacity)
	fi
}

cpu_value () {
    preview_total=0
    preview_idle=0
    cache="/tmp/cpu_value.cache.eww"


    if [[ -f "${cache}" ]]; then
		file=$(cat "${cache}")
		preview_total=$(echo "${file}" | head -n 1)
		preview_idle=$(echo "${file}" | tail -n 1)
	fi

	cpu=(`cat /proc/stat | grep '^cpu '`)
	unset cpu[0]
	idle=${cpu[4]}

	total=0

	for value in "${cpu[@]:0:4}"; do
		let "total=$total+$value"
	done

	if [[ "${preview_total}" != "" ]] && [[ "${preview_idle}" != "" ]]; then
		let "diff_idle=$idle-$preview_idle"
		let "diff_total=$total-$preview_total"
		let "diff_usage=(1000*($diff_total-$diff_idle)/$diff_total+5)/10"
		echo "${diff_usage}"
	else
		echo "0"
	fi

	echo "${total}" > "${cache}"
	echo "${idle}" >> "${cache}"
}

temperature_value () {
    IFS=')' read -ra core_temp_arr <<< $(sensors | grep '^Core\s[[:digit:]]\+:')

    total_cpu_temp=0
    index=0
    
    for i in "${core_temp_arr[@]}"; do :
        temp=$(echo $i | sed -n 's/°C.*//; s/.*[+-]//; p; q')
        let index++
        total_cpu_temp=$(echo "$total_cpu_temp + $temp" | bc)
    done
    
    avg_cpu_temp=$(echo "scale=2; $total_cpu_temp / $index" | bc)

    temp_status="$avg_cpu_temp"
    echo $temp_status
}

case $1 in
    volume-icon)
        volume_icon
    ;;
    brightness-icon)
        brightness_icon
    ;;
    volume-value)
        echo $volume
    ;;
    brightness-value)
        echo $brightness
    ;;
    network-icon)
        network_icon
    ;;
    network-speed)
        network_speed
    ;;
    network-name)
        network_name
    ;;
    empty-battery)
        battery_empty
    ;;
    battery-icon)
        battery_icon
    ;;
    battery-capacity)
        battery_capacity
    ;;
    cpu-value)
        cpu_value
    ;;
    memory-value)
        printf "%.0f\n" $(free -m | grep Mem | awk '{print ($3/$2)*100}')
    ;;
    temperature-value)
        temperature_value
    ;;
    disk-value)
        df -h / | awk '{print $5}' | tail -n1 | sed 's/%//g'
    ;;
esac
