#!/bin/sh -e

__battery_detail() {
  if [ "$(uname)" == "OpenBSD" ]; then
    apm -a
  elif 
    local bat
    for bat in /proc/acpi/battery/*; do
      cat "$bat/info"
      cat "$bat/state"
    done
    # FIXME: do the same thing with the /sys interface
  fi
}

__battery() {
  local bat line present sign state percent full rem color bcolor
  # OpenBSD
  if [ "$(uname)" == "OpenBSD" ]; then
    $percent=$(apm -l)
  elif [ "$(uname)" == "Linux" ]; then
    # Linux support
    present=""; full="0"; rem="0"; state=""
    for bat in $BATTERY /sys/class/power_supply/* /proc/acpi/battery/*; do
	case "$bat" in
	  /sys/*)
		if [ -r "$bat/uevent" ]; then
		  . "$bat/uevent"
		  case "$POWER_SUPPLY_NAME" in AC|ac|Ac|aC) continue ;; esac
		  present="$POWER_SUPPLY_PRESENT"
		  # Some use "CHARGE", others use "ENERGY", still others "CAPACITY"
		  [ -n "$POWER_SUPPLY_CHARGE_FULL" ] && full=$((POWER_SUPPLY_CHARGE_FULL+full))
		  [ -n "$POWER_SUPPLY_ENERGY_FULL" ] && full=$((POWER_SUPPLY_ENERGY_FULL+full))
		  [ -n "$POWER_SUPPLY_CHARGE_NOW" ] && rem=$((POWER_SUPPLY_CHARGE_NOW+rem))
		  [ -n "$POWER_SUPPLY_ENERGY_NOW" ] && rem=$((POWER_SUPPLY_ENERGY_NOW+rem))
		  if [ -n "$POWER_SUPPLY_CAPACITY" ] && [ ! -n "$POWER_SUPPLY_ENERGY_NOW" ] && [ ! -n "$POWER_SUPPLY_CHARGE_NOW" ]; then
			rem="$POWER_SUPPLY_CAPACITY" && full="100"
		  fi
		  [ "$POWER_SUPPLY_STATUS" != "Unknown" ] && state="$POWER_SUPPLY_STATUS"
		fi
		;;
	  /proc/*)
		[ -f "$bat/info" ] || continue
		while read line; do
		  set -- ${line}
		  case "$line" in
			present:*)
			  # make sure that this battery is present
			  [ "$2" = "no" ] && continue 2
			  present="$2";;
			last\ full\ capacity:*) full="$4";;
		  esac
		  [ -n "$present" -a -n "$full" ] && break
		done < "${bat}/info"
		while read line; do
		  set -- ${line}
		  case "$line" in
			remaining\ capacity:*) rem="$3";;
			charging\ state:*) state="$3";;
		  esac
		  [ -n "$rem" -a -n "$state" ] && break
		done < "$bat/state"
		[ -n "$full" ] && [ -n "$rem" ] && [ -n "$state" ] && break
		;;
	esac
    done
  elif [ "$(uname)" == "Darwin" ]; then
    # Mac OS X support
    if eval $BYOBU_TEST /usr/sbin/ioreg >/dev/null 2>&1; then
	# MacOS support
	local key
	for key in CurrentCapacity MaxCapacity ExternalChargeCapable FullyCharged; do
	  line=$(/usr/sbin/ioreg -n AppleSmartBattery -w0 | grep $key | sed -e 's/|//g' | awk '{ print $3 }')
	  case "$key" in
		CurrentCapacity) rem="$line";;
		MaxCapacity) full="$line";;
		ExternalChargeCapable)
		  if [ "${line}" = "Yes" ]; then
			state="charging"
		  elif [ "${line}" = "No" ]; then
			state="discharging"
		  fi
		  ;;
		FullyCharged)
		  if [ "${line}" = "Yes" ]; then
			state="charged"
		  fi
		  ;;
	  esac
	done
    fi
  fi
  if [ $rem -ge 0 ] && [ $full -gt 0 ]; then
	percent=$(((100*$rem)/$full))
	if [ "$percent" -lt 33 ]; then
	  color="R w"
	  bcolor="b R w"
	elif [ "$percent" -lt 67 ]; then
	  color="Y k"
	  bcolor="b Y k"
	else
	  color="G k"
	  bcolor="b G k"
	fi
	percent="${percent}${PCT}"
	# Convert state to lower case
	state=$(printf "%s" "$state" | $BYOBU_SED 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/')
	case $state in
	  charging) sign="+" ;;
	  discharging) sign="-" ;;
	  charged|unknown|full) sign="=" ;;
	  *) sign="$state" ;;
	esac
	if [ -z "$percent" ]; then
	  rm -f "$BYOBU_RUN_DIR/status.$BYOBU_BACKEND/battery"*
	  return
	fi
	color $bcolor; printf "%s" "$percent"; color -; color $color; printf "%s" "$sign"; color --
  fi
}

# vi: syntax=sh ts=4 noexpandtab