#!/usr/bin/env bash
# Refresh a Terminal Widget table with remote server stats over SSH.
# Redact the CONFIG block before sharing publicly.

set -euo pipefail

# === CONFIG (edit me; redact before sharing) ===
TARGET="server-stats"
TW="/opt/homebrew/bin/terminal-widget"

# Option 1: SSH config Host alias (preferred if set)
SSH_ALIAS="dh"

# Option 2: explicit connection (used when SSH_ALIAS is empty)
SSH_USER="youruser"
SSH_HOST="your.example.com"
SSH_KEY="" # optional identity file; empty = default agent/keys
# === END CONFIG ===

ssh_base=(ssh -o BatchMode=yes -o ConnectTimeout=10)

if [[ -n "${SSH_ALIAS}" ]]; then
  ssh_cmd=("${ssh_base[@]}" "${SSH_ALIAS}")
else
  if [[ -z "${SSH_USER}" || -z "${SSH_HOST}" ]]; then
    echo "widget-server-stats: set SSH_ALIAS or both SSH_USER and SSH_HOST" >&2
    exit 1
  fi
  if [[ -n "${SSH_KEY}" ]]; then
    ssh_cmd=("${ssh_base[@]}" -i "${SSH_KEY}" "${SSH_USER}@${SSH_HOST}")
  else
    ssh_cmd=("${ssh_base[@]}" "${SSH_USER}@${SSH_HOST}")
  fi
fi

remote_script='printf "load="; cut -d" " -f1-3 /proc/loadavg
free -m | awk "/^Mem:/{printf \"mem_used=%s\nmem_total=%s\nmem_avail=%s\n\", \$3, \$2, \$7}"
df -P "$HOME" | awk "NR==2{printf \"disk_used_kb=%s\ndisk_total_kb=%s\ndisk_used_pct=%s\n\", \$3, \$2, \$5}"
awk "{printf \"uptime_days=%d\n\", int(\$1/86400)}" /proc/uptime'

if ! metrics="$("${ssh_cmd[@]}" "${remote_script}")"; then
  echo "widget-server-stats: SSH failed" >&2
  exit 1
fi

load="" mem_used="" mem_total="" mem_avail=""
disk_used_kb="" disk_total_kb="" disk_used_pct="" uptime_days=""

while IFS='=' read -r key value; do
  case "$key" in
    load|mem_used|mem_total|mem_avail|disk_used_kb|disk_total_kb|disk_used_pct|uptime_days)
      printf -v "$key" '%s' "$value"
      ;;
  esac
done <<< "$metrics"

: "${load:?missing load}"
: "${mem_used:?missing mem_used}"
: "${mem_total:?missing mem_total}"
: "${mem_avail:?missing mem_avail}"
: "${disk_used_kb:?missing disk_used_kb}"
: "${disk_total_kb:?missing disk_total_kb}"
: "${disk_used_pct:?missing disk_used_pct}"
: "${uptime_days:?missing uptime_days}"

load_fmt="${load// /, }"

mem_free_pct=$(( mem_avail * 100 / mem_total ))
mem_fmt="${mem_used}/${mem_total} (${mem_free_pct}% free)"

disk_used_mb=$(( disk_used_kb / 1024 ))
disk_total_mb=$(( disk_total_kb / 1024 ))
disk_used_pct_num="${disk_used_pct%%%}"
disk_free_pct=$(( 100 - disk_used_pct_num ))
disk_fmt="${disk_used_mb}/${disk_total_mb} (${disk_free_pct}% free)"

uptime_fmt="${uptime_days} days"

tsv=$(printf 'load\t%s\nmem\t%s\ndisk\t%s\nuptime\t%s\n' \
  "$load_fmt" "$mem_fmt" "$disk_fmt" "$uptime_fmt")

printf '%s' "$tsv" | "$TW" --target "$TARGET" --table - --no-header \
  --grid zebra-row --table-align right,left --table-layout fill --center-table --fit-text --background-image "https://images.unsplash.com/photo-1431440869543-efaf3388c585?q=80&w=2940&auto=format&fit=crop&ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D" --fg ffffff --font Menlo