#!/bin/bash
R=$'\033[1;31m'
G=$'\033[1;32m'
Y=$'\033[1;33m'
C=$'\033[1;36m'
DIM=$'\033[0;37m'
RST=$'\033[0m'
BOLD=$'\033[1m'
BGR=$'\033[41m'

W=78
INNER=78

rep() {
    local i out=''
    for (( i=0; i<$2; i++ )); do out+="$1"; done
    printf '%s' "$out"
}
_TL() { printf '\xe2\x95\x94'; }
_EQ() { printf '\xe2\x95\x90'; }
_TR() { printf '\xe2\x95\x97'; }
_ML() { printf '\xe2\x95\xa0'; }
_MR() { printf '\xe2\x95\xa3'; }
_VB() { printf '\xe2\x95\x91'; }
_BL() { printf '\xe2\x95\x9a'; }
_BR() { printf '\xe2\x95\x9d'; }
_HD() { printf '\xe2\x94\x80'; }

hline() { rep "$(_EQ)" $W; }

_BOX_COLOR="$Y"

box_open() {
    local title="$1" color="${2:-$Y}"
    _BOX_COLOR="$color"
    local tlen=${#title}
    local lpad=$(( (W - tlen - 2) / 2 ))
    local rpad=$(( W - tlen - 2 - lpad ))
    local ls rs
    ls=$(rep ' ' $lpad)
    rs=$(rep ' ' $rpad)
    printf '\n'
    printf "%b%s%s%s%b\n" "$color" "$(_TL)" "$(hline)" "$(_TR)" "$RST"
    printf "%b%s%s%b%b%b %s %b%b%s%s%b\n" "$color" "$(_VB)" "$ls" "$RST" "$BOLD" "$Y" "$title" "$RST" "$color" "$rs" "$(_VB)" "$RST"
    printf "%b%s%s%s%b\n" "$color" "$(_ML)" "$(hline)" "$(_MR)" "$RST"
}

box_close() {
    local color="${1:-$_BOX_COLOR}"
    printf "%b%s%s%s%b\n" "$color" "$(_BL)" "$(hline)" "$(_BR)" "$RST"
}

# bline: wrap one line with ¦ borders, padding to INNER
bline() {
    local text="$1" bc="${2:-$_BOX_COLOR}"
    local vis
    vis=$(printf '%s' "$text" | sed -E 's/\x1b\[[0-9;:]*[mGKHFJA-Za-z]//g; s/\x1b\([A-Z]//g')
    local vlen=${#vis}
    local pad=$(( INNER - vlen ))
    [ "$pad" -lt 0 ] && pad=0
    local spaces
    spaces=$(rep ' ' "$pad")
    printf "%b%s%b%s%s%b%s%b\n" "$bc" "$(_VB)" "$RST" "$text" "$spaces" "$bc" "$(_VB)" "$RST"
}

bempty() { bline '' "${1:-$_BOX_COLOR}"; }

# -- IPMI SDR -----------------------------------------------------------------
box_open "IPMI SENSORS (SDR)" "$Y"
SDR_OUT=$(ipmicfg -sdr 2>/dev/null)
while IFS= read -r line; do
    if   echo "$line" | grep -q "^  OK";       then bline "$(printf "%b%s%b" "$G"          "$line" "$RST")"
    elif echo "$line" | grep -qiE "fail|crit"; then bline "$(printf "%b%b%s%b" "$BGR" "$BOLD" "$line" "$RST")"
    elif echo "$line" | grep -qiE "warn|err";  then bline "$(printf "%b%b%s%b" "$BOLD" "$Y"  "$line" "$RST")"
    else                                            bline "$(printf "%b%s%b"   "$DIM"         "$line" "$RST")"
    fi
done <<< "$SDR_OUT"
unset SDR_OUT
box_close "$Y"

# -- IPMI SEL -----------------------------------------------------------------
box_open "IPMI SEL" "$Y"
SEL_OUT=$(ipmicfg -sel list 2>/dev/null)
while IFS= read -r line; do
    if   echo "$line" | grep -qi "assertion";   then bline "$(printf "%b%b%s%b" "$BOLD" "$Y" "$line" "$RST")"
    elif echo "$line" | grep -qi "deassertion"; then bline "$(printf "%b%s%b"       "$G"      "$line" "$RST")"
    else                                             bline "$(printf "%b%s%b"     "$DIM"       "$line" "$RST")"
    fi
done <<< "$SEL_OUT"
unset SEL_OUT
box_close "$Y"

# -- COMPLETE -----------------------------------------------------------------
_fp=$(rep ' ' $(( W - 10 )))
printf '\n'
printf "%b%s%s%s%b\n" "$G" "$(_TL)" "$(hline)" "$(_TR)" "$RST"
printf "%b%s%b%b%b  COMPLETE%s%b%b%s%b\n" "$G" "$(_VB)" "$RST" "$BOLD" "$G" "$_fp" "$RST" "$G" "$(_VB)" "$RST"
printf "%b%s%s%s%b\n" "$G" "$(_BL)" "$(hline)" "$(_BR)" "$RST"
printf '\n'