#!/bin/bash

# omarchy:summary=Returns a formatted battery status string with percentage and power draw/charge.
# omarchy:args=[--shell]

shell_output=false

case "${1:-}" in
  "")
    ;;
  --shell)
    shell_output=true
    ;;
  *)
    echo "Usage: omarchy-battery-status [--shell]" >&2
    exit 2
    ;;
esac

battery=$(upower -e 2>/dev/null | grep BAT | head -n 1)
[[ -z $battery ]] && exit 0

battery_info=$(upower -i "$battery")

percentage=$(awk '/percentage/ { print int($2); exit }' <<<"$battery_info")
power_rate=$(awk '/energy-rate/ {
  rounded = sprintf("%.1f", $2)
  sub(/\.0$/, "", rounded)
  print rounded
  exit
}' <<<"$battery_info")
state=$(awk '/state/ { print $2; exit }' <<<"$battery_info")
time_remaining=$(omarchy-battery-remaining-time 2>/dev/null)
capacity=$(omarchy-battery-capacity 2>/dev/null)

if [[ $shell_output == "true" ]]; then
  printf 'percentage\t%s\n' "${percentage}%"
  printf 'state\t%s\n' "$state"
  printf 'rate\t%s\n' "${power_rate}W"
  printf 'size\t%s\n' "${capacity}Wh"
  printf 'time\t%s\n' "$time_remaining"

  cycles=$(cat /sys/class/power_supply/BAT*/cycle_count 2>/dev/null | head -1)
  end=$(cat /sys/class/power_supply/BAT*/charge_control_end_threshold 2>/dev/null | head -1)
  start=$(cat /sys/class/power_supply/BAT*/charge_control_start_threshold 2>/dev/null | head -1)

  [[ -n $cycles ]] && printf 'cycles\t%s\n' "$cycles"

  if [[ -n $end ]]; then
    if [[ -n $start && $start != $end ]]; then
      printf 'threshold\t%s-%s%%\n' "$start" "$end"
    else
      printf 'threshold\t%s%%\n' "$end"
    fi
  fi

  exit 0
fi

if [[ $state == "charging" ]]; then
  echo "Battery ${percentage}%  ·  ${time_remaining} to full  ·   ${power_rate}W / ${capacity}Wh"
else
  echo "Battery ${percentage}%  ·  ${time_remaining} left  ·   ${power_rate}W / ${capacity}Wh"
fi
