#!/usr/bin/env bash

cache_dir=~/.cache/tmux
cache_file=$cache_dir/system-info

# Make sure the output directory exists.
if [ ! -d $cache_dir ]; then
  mkdir -p $cache_dir
fi

if sensors 'coretemp-isa-0000' &> /dev/null; then
  function get_cpu_temp() {
    sensors 'coretemp-isa-0000' | awk 'NR == 3 { print substr($4, 2) }'
  }
elif sensors 'k10temp-pci-00c3' &> /dev/null; then
  function get_cpu_temp {
    sensors 'k10temp-pci-00c3' | grep 'Tctl:' | awk '{ print $2 }'
  }
else
  function get_cpu_temp {
    echo 'N/A°C'
  }
fi

if [ "`acpi -b`" != "No support for device type: power_supply" ]; then
  function get_battery {
    acpi -b | \
    awk '{ print $4 }' | \
    awk '$battery ~ /.*/ {
      printf "%3d%% %s\n", $battery, substr("󰁹󰂂󰂁󰂀󰁿󰁾󰁽󰁼󰁻󰁺󰂎", int($battery / 9), 1)
    }'
  }
else
  function get_battery {
    echo ''
  }
fi

# Cleanup cache file when interrupted.
trap '[ -f $cache_file ] && rm $cache_file; exit' INT
trap '[ -f $cache_file ] && rm $cache_file; exit' TERM

while true; do
  # Parse the current CPU load on all cores/threads.
  cpu_load=" `mpstat -P ALL -n 1 -u 1 -o JSON | \
    jq '.sysstat.hosts[0].statistics[0]["cpu-load"][1:]|.[].idle' | \
    awk '$idle ~ /[-.0-9]*/ { printf "%s", substr("█▇▆▅▄▃▂▁ ", int($idle / 11), 1) }'`"

  # Parse the current CPU package temperature.
  cpu_temp=$(get_cpu_temp)

  # Get the battery status if present.
  battery=$(get_battery)

  # Write to the cache file.
  echo "$cpu_temp$cpu_load$battery" > $cache_file
done