#!/bin/bash

source /etc/profile

### Apply device quirks
if [ -e "/sys/firmware/devicetree/base/model" ]
then
  export QUIRK_DEVICE="$(tr -d '\0' </sys/firmware/devicetree/base/model 2>/dev/null)"
else
  export QUIRK_DEVICE="$(tr -d '\0' </sys/class/dmi/id/sys_vendor 2>/dev/null) $(tr -d '\0' </sys/class/dmi/id/product_name 2>/dev/null)"
fi
export QUIRK_DEVICE="$(echo ${QUIRK_DEVICE} | sed -e "s#[/]#-#g")"

info_quirks() {
  for QUIRK in /usr/lib/autostart/quirks/platforms/"${HW_DEVICE}"/info.d/${1}/* \
               /usr/lib/autostart/quirks/devices/"${QUIRK_DEVICE}"/info.d/${1}/*
  do
    "${QUIRK}" 2>/dev/null
  done
}

### short version (for osd)
if test "$1" = "--short"
then
    BATT=$(awk 'BEGIN {FS="="} /POWER_SUPPLY_CAPACITY=/ {print $2; exit}' /sys/class/power_supply/[Bb][Aa][Tt]*/uevent 2>/dev/null)
    DT=$(date +%H:%M)
    if test -n "${BATT}"
    then
	echo "Battery: ${BATT}% - ${DT}"
    else
	echo "${DT}"
    fi
    exit 0
fi
###

V_CPUNB=$(grep -E $'^processor\t:' /proc/cpuinfo | wc -l)
V_CPUMODEL1=$(grep -E $'^model name\t:' /proc/cpuinfo | head -1 | sed -e s+'^model name\t: '++)
V_SYSTEM=$(uname -rs)
V_ARCH=$(uname -m)

[[ "$V_CPUMODEL1" ]] || V_CPUMODEL1="${HW_CPU}"

# network
ip=$(ip -4 addr show dev eth0 2>/dev/null | grep inet | awk '{print $2}' | cut -d/ -f1)
if [ -z "$ip" ]; then
  WIFI_DEV="$({ ls /sys/class/net; echo wlan0; } | grep -m1 ^wlan)"
  ip=$(ip -4 addr show dev ${WIFI_DEV} 2>/dev/null | grep inet | awk '{print $2}' | cut -d/ -f1)
fi
if [ -z "$ip" ]; then
  ip="Offline"
fi

host=$(hostname)

# gpu
CUR_FREQ=$(cat "$GPU_FREQ/cur_freq")
MAX_FREQ=$(cat "$GPU_FREQ/max_freq")
GPUCUR=$((CUR_FREQ / 1000000))
GPUMAX=$((MAX_FREQ / 1000000))

# ram
MEMT=$(grep MemTotal /proc/meminfo | sed 's/[^0-9]*//g')
MEMT=$((${MEMT} / 1000))
MEMAV=$(grep MemAvailable /proc/meminfo | sed 's/[^0-9]*//g')
MEMAV=$((${MEMAV} / 1000))

# battery
BATT=$(awk 'BEGIN {FS="="} /POWER_SUPPLY_CAPACITY=/ {print $2; exit}' /sys/class/power_supply/[Bb][Aa][Tt]*/uevent 2>/dev/null)

case ${HW_ARCH} in
  aarch64)
    declare -a CF MF

    CNTR=0
    for CPUFREQ in /sys/devices/system/cpu/cpufreq/*
    do
      if [[ "${CPUFREQ}" =~ boost ]]
      then
        continue
      fi
      if [ "${CNTR}" -eq 0 ]
      then
        CF+=("CURRENT FREQUENCY:")
        MF+=("MAXIMUM FREQUENCY:")
      fi
      RELCPUS=$(cat ${CPUFREQ}/related_cpus 2>/dev/null)
      if [ "${#RELCPUS}" -gt 1 ]
      then
        FIELD="$(cat ${CPUFREQ}/related_cpus 2>/dev/null | awk '{print $1"-"$NF}')"
      else
        FIELD="$(cat ${CPUFREQ}/related_cpus 2>/dev/null)"
      fi
      if [ -e "${CPUFREQ}/scaling_cur_freq" ]; then
        CF+=("THREADS ${FIELD}: $(( $(cat ${CPUFREQ}/scaling_cur_freq 2>/dev/null | sort | tail -n 1) / 1000))MHz")
      fi
      if [ -e "${CPUFREQ}/scaling_max_freq" ]; then
        MF+=("THREADS ${FIELD}: $(( $(cat ${CPUFREQ}/scaling_max_freq 2>/dev/null | sort | tail -n 1) / 1000))MHz")
      fi
      CNTR=$(( CNTR + 1 ))
    done
  ;;
esac

echo "SYSTEM INFORMATION:"
echo "DEVICE: ${QUIRK_DEVICE}"
echo "OPERATING SYSTEM: ${OS_NAME}"
echo "VERSION: ${OS_VERSION} (${OS_BUILD})"
echo "BUILD ID: ${BUILD_ID:0:7} (${BUILD_BRANCH})"
echo "KERNEL: ${V_SYSTEM} ($(uname -m))"
echo "NETWORK INFORMATION:"
echo "HOST NAME: ${host}"
echo "IP ADDRESS: ${ip}"
echo "DISK SPACE:"
echo "/storage/games-internal: $(df -h /storage/games-internal | awk '/dev/ {print $3"/"$2" ("$5")"}')"
echo "/storage/games-external: $(df -h /storage/games-external | awk '/dev/ {print $3"/"$2" ("$5")"}')"

if test -n "${BATT}"
then
    echo "BATTERY INFORMATION:"
    echo "BATTERY REMAINING: ${BATT}%"
    BAT_HEALTH=$(cat /sys/class/power_supply/[Bb][Aa][Tt]*/health 2>/dev/null)
    if [ -n "${BAT_HEALTH}" ]
    then
      echo "BATTERY HEALTH: ${BAT_HEALTH}"
    fi
    BAT_STATUS=$(cat /sys/class/power_supply/[Bb][Aa][Tt]*/status 2>/dev/null)
    if [ -n "${BAT_STATUS}" ]
    then
      echo "BATTERY STATE: ${BAT_STATUS}"
    fi
fi
echo "CPU INFORMATION:"
echo "CPU: ${V_CPUMODEL1} (${V_CPUNB} Cores)"

# temperature
# Unit: millidegree Celsius
if [ -n "${DEVICE_TEMP_SENSOR}" ]
then
  TEMPE=$(awk '{total += $1; count++} END {printf "%d", total/count/1000}' ${DEVICE_TEMP_SENSOR})
  if [ -n "${TEMPE}" ]
  then
    echo "CPU TEMPERATURE: ${TEMPE}°"
  fi
fi

if [ "${DEVICE_HAS_FAN}" = "true" ]
then
  FANSPEED=$(cat ${DEVICE_FAN_INPUT} 2>/dev/null)
  if [ "${FANSPEED}" = "0" ]
  then
    FANSPEED="OFF"
  else
    FANSPEED="${FANSPEED} RPM"
  fi
  echo "CPU FAN: ${FANSPEED}"
fi
case ${HW_ARCH} in
  aarch64)
    for C in "${CF[@]}"
    do
      echo ${C}
    done
    for M in "${MF[@]}"
    do
      echo ${M}
    done
  ;;
esac
if [ -n "$GPUCUR" ]; then
  echo "GPU INFORMATION:"
# GPU temperature
# Unit: millidegree Celsius
  if [ -n "${DEVICE_GPU_TEMP_SENSOR}" ]; then
    GTEMPE=$(awk '{total += $1; count++} END {printf "%d", total/count/1000}' ${DEVICE_GPU_TEMP_SENSOR})
    if [ -n "${GTEMPE}" ]; then
    echo "GPU TEMPERATURE: ${GTEMPE}°"
  fi
fi
  echo "GPU CURRENT FREQUENCY: ${GPUCUR} MHz"
  echo "GPU MAXIMUM FREQUENCY: ${GPUMAX} MHz"
fi
echo "RAM INFORMATION:"
echo "RAM AVAILABLE: ${MEMAV} MB"
echo "RAM CAPACITY: ${MEMT} MB"

info_quirks
