function ui::logs::wg_row() {
  local ts="${1:-}" client="${2:-}" endpoint="${3:-}" event="${4:-}" count="${5:-1}" \
        w_client="${6:-20}" w_endpoint="${7:-20}"
  local event_color
  case "$event" in
    handshake) event_color="\033[1;32m" ;;
    attempt)   event_color="\033[1;31m" ;;
    *)         event_color="\033[0;37m" ;;
  esac
  local count_suffix=""
  [[ "$count" -gt 1 ]] && count_suffix=" \033[2m(x${count})\033[0m"
  local client_pad endpoint_pad_n
  client_pad=$(printf "%-${w_client}s" "$client")
  endpoint_pad_n=$(( w_endpoint - ${#endpoint} ))
  [[ $endpoint_pad_n -lt 0 ]] && endpoint_pad_n=0
  printf "  %s  %s  %s%*s  %b%s\033[0m%b\n" \
    "$ts" "$client_pad" "$endpoint" "$endpoint_pad_n" "" \
    "$event_color" "$event" "$count_suffix"
}
function ui::logs::wg_row_table() {
  local ts="${1:-}" client="${2:-}" endpoint="${3:-}" event="${4:-}" count="${5:-1}"
  local count_str=""
  [[ "$count" -gt 1 ]] && count_str=" (x${count})"
  local event_colored
  case "$event" in
    attempt*)   event_colored="\033[1;31m${event}\033[0m" ;;
    handshake*) event_colored="\033[1;32m${event}\033[0m" ;;
    *)          event_colored="$event" ;;
  esac
  printf "  %-20s %-20s %-18s %b%s\n" "$ts" "$client" "$endpoint" "$event_colored" "$count_str"
}
