#!/bin/bash
# ============================================================================
#  sysmon2.sh —— 新一代控制台面板：只占 1 行状态栏，把整屏让给图表
#    tabs  : 主窗格 btop 满屏；Ctrl-b n 切到 GPU(nvtop) 窗口
#    split : 左 btop(60%) / 右 nvtop(40%) 并排「驾驶舱」布局
#  用法: sysmon2.sh [tabs|split] [--detach]
# ============================================================================
set -u
MODE=tabs
DETACH=0
for a in "$@"; do
    case "$a" in
        tabs|split) MODE="$a" ;;
        --detach)   DETACH=1 ;;
    esac
done

SESSION=sysmon2
BTOP_BIN=$(command -v btop || echo /opt/btop/bin/btop)
NVTOP_BIN=$(command -v nvtop || true)
BTOP_CMD="while :; do $BTOP_BIN; sleep 2; done"
if [ -n "$NVTOP_BIN" ]; then GPU_CMD="while :; do $NVTOP_BIN; sleep 2; done"
else                       GPU_CMD="while :; do nvidia-smi -l 2; sleep 2; done"; fi

if [ -t 1 ]; then setterm -blank 0 -powerdown 0 -powersave off >/dev/null 2>&1 || true; fi

if tmux has-session -t "$SESSION" 2>/dev/null; then
    [ "$DETACH" -eq 1 ] && exit 0
    tmux attach -t "$SESSION"; exit $?
fi

tmux -f /dev/null new-session -d -s "$SESSION" -n MAIN "$BTOP_CMD"
if [ "$MODE" = split ]; then
    tmux split-window -h -t "$SESSION:MAIN" -l 40% "$GPU_CMD"
    tmux select-pane -t "$SESSION:MAIN.0"
else
    tmux new-window -t "$SESSION" -n GPU "$GPU_CMD"
    tmux select-window -t "$SESSION:MAIN"
fi

# ---- 状态栏：1 行，左右各跑一个脚本（每 5s 刷新）----
tmux set-option -t "$SESSION" status on
tmux set-option -t "$SESSION" status-interval 5
tmux set-option -t "$SESSION" status-style 'bg=colour235,fg=colour250'
tmux set-option -t "$SESSION" status-left  '#(/usr/local/bin/sysmon-line-left.sh)'
tmux set-option -t "$SESSION" status-right '#(/usr/local/bin/sysmon-line-right.sh)'
tmux set-option -t "$SESSION" status-left-length 120
tmux set-option -t "$SESSION" status-right-length 140
tmux set-option -t "$SESSION" status-justify left
tmux set-option -t "$SESSION" window-status-current-style 'bg=colour238,fg=colour255,bold'
tmux set-option -t "$SESSION" mouse on
tmux set-option -t "$SESSION" set-titles on
# 终端尺寸变化时把并排比例钉回 60/40
if [ "$MODE" = split ]; then
    tmux set-hook -t "$SESSION" client-resized \
        "resize-pane -t $SESSION:MAIN.1 -x 40%" 2>/dev/null || true
fi

[ "$DETACH" -eq 1 ] && exit 0
tmux attach -t "$SESSION"
