#!/bin/bash
# ============================================================================
#  install.sh —— 在 GPU 机(zywpc / Ubuntu 24.04) 部署「开机自动满屏系统资源面板」
#  必须以 root 运行：sudo bash install.sh
#  做五件事：
#    1) 装 nvtop / tmux / 编译依赖
#    2) btop 1.4.7：优先源码编译带 GPU(NVML) 支持；失败回退官方静态包(无GPU)/apt
#    3) 安装 sysmon.sh / sysmon-status.sh / /etc/sysmon.conf
#    4) 给 tty1 配免密自动登录（systemd drop-in）
#    5) 给 zyw 的 ~/.bash_profile 加「仅 tty1、非 SSH 时启动面板」
#  回滚：sudo bash uninstall.sh
# ============================================================================
set -uo pipefail
[ "$(id -u)" -eq 0 ] || { echo "请用 sudo 运行"; exit 1; }

SRC="$(cd "$(dirname "$0")" && pwd)"
TARGET_USER=zyw
TARGET_HOME=/home/zyw
BTOP_VER=1.4.7
BTOP_DIR=/opt/btop
export DEBIAN_FRONTEND=noninteractive

echo "== 1/5 安装依赖 (nvtop/tmux/curl/git/g++/make) =="
apt-get install -y --no-install-recommends nvtop tmux curl xz-utils git g++ make >/dev/null 2>&1 || \
    apt-get install -y --no-install-recommends nvtop tmux curl >/dev/null

echo "== 2/5 安装 btop ${BTOP_VER}（优先带 GPU 支持的源码编译） =="
BTOP_BUILT=0
NVML_INC=""
for c in /usr/local/cuda/include /usr/local/cuda-13.1/targets/x86_64-linux/include /usr/include; do
    if [ -f "$c/nvml.h" ]; then NVML_INC="$c"; break; fi
done

# btop 1.4.x 用了 C++23 的 std::ranges::to，Ubuntu 24.04 自带 g++ 13 编不过，需要 g++-14
CXX_BIN=""
if command -v g++-14 >/dev/null 2>&1; then
    CXX_BIN=g++-14
else
    apt-get install -y --no-install-recommends g++-14 >/dev/null 2>&1
    command -v g++-14 >/dev/null 2>&1 && CXX_BIN=g++-14
fi
[ -z "$CXX_BIN" ] && command -v g++ >/dev/null 2>&1 && CXX_BIN=g++

if [ -n "$CXX_BIN" ] && command -v make >/dev/null 2>&1 && [ -n "$NVML_INC" ]; then
    echo "   源码编译: CXX=$CXX_BIN GPU_SUPPORT=true NVML_INCLUDE=$NVML_INC 线程=$(nproc)"
    rm -rf /tmp/btop-src /tmp/btop-build.log
    if git clone -q --depth 1 --branch "v${BTOP_VER}" https://github.com/aristocratos/btop /tmp/btop-src 2>>/tmp/btop-build.log \
       && make -C /tmp/btop-src -j"$(nproc)" CXX="$CXX_BIN" GPU_SUPPORT=true NVML_INCLUDE="$NVML_INC" >>/tmp/btop-build.log 2>&1 \
       && [ -x /tmp/btop-src/bin/btop ]; then
        rm -rf "$BTOP_DIR"
        install -d "$BTOP_DIR/bin" "$BTOP_DIR/themes"
        install -m 0755 /tmp/btop-src/bin/btop "$BTOP_DIR/bin/btop"
        cp -a /tmp/btop-src/themes/. "$BTOP_DIR/themes/" 2>/dev/null
        BTOP_BUILT=1
        echo "   编译成功 -> $BTOP_DIR/bin/btop"
    else
        echo "   编译失败，日志末尾："
        tail -6 /tmp/btop-build.log 2>/dev/null | sed 's/^/     /'
    fi
else
    echo "   跳过编译（缺 g++/make/nvml.h）"
fi

if [ "$BTOP_BUILT" -eq 0 ]; then
    # 官方静态包（注意：官方以 GPU_SUPPORT=false 编译，看不到显卡）
    URL="https://github.com/aristocratos/btop/releases/download/v${BTOP_VER}/btop-x86_64-unknown-linux-musl.tar.gz"
    echo "   回退官方静态包（无 GPU 面板；GPU 由 nvtop 窗口与状态栏承担）"
    if curl -fsSL --retry 3 -o /tmp/btop.tar.gz "$URL"; then
        rm -rf /tmp/btop-extract "$BTOP_DIR"
        mkdir -p /tmp/btop-extract
        tar -xzf /tmp/btop.tar.gz -C /tmp/btop-extract
        install -d "$BTOP_DIR/bin" "$BTOP_DIR/themes"
        install -m 0755 /tmp/btop-extract/btop/bin/btop "$BTOP_DIR/bin/btop" 2>/dev/null
        cp -a /tmp/btop-extract/btop/themes/. "$BTOP_DIR/themes/" 2>/dev/null
        rm -rf /tmp/btop-extract /tmp/btop.tar.gz
    fi
fi

if [ -x "$BTOP_DIR/bin/btop" ]; then
    ln -sf "$BTOP_DIR/bin/btop" /usr/local/bin/btop
else
    echo "   全部失败，使用 apt 版 btop 1.3"
    apt-get install -y --no-install-recommends btop >/dev/null 2>&1
    rm -f /usr/local/bin/btop   # 清掉可能残留的悬空软链
fi
command -v nvtop >/dev/null 2>&1 && ln -sf "$(command -v nvtop)" /usr/local/bin/nvtop

echo "== 3/5 安装面板脚本 =="
install -m 0755 "$SRC/sysmon-status.sh" /usr/local/bin/sysmon-status.sh
install -m 0755 "$SRC/sysmon.sh"        /usr/local/bin/sysmon.sh
ln -sf /usr/local/bin/sysmon.sh /usr/local/bin/sysmon
[ -f /etc/sysmon.conf ] || install -m 0644 "$SRC/sysmon.conf" /etc/sysmon.conf
cat > /usr/local/bin/sysmon-disable <<'EOF'
#!/bin/bash
# 停用「登录自动进监控面板」（当前会话可在面板里按 Ctrl-b d 退出）
touch "$HOME/.sysmon-off"
echo "已停用：下次登录 tty1 将是普通 shell。恢复：sysmon-enable"
echo "（关掉当前正在跑的面板：tmux kill-session -t sysmon）"
EOF
cat > /usr/local/bin/sysmon-enable <<'EOF'
#!/bin/bash
rm -f "$HOME/.sysmon-off"
echo "已恢复：下次登录 tty1 自动进入监控面板。也可直接运行 sysmon 立即进入。"
EOF
chmod 0755 /usr/local/bin/sysmon-disable /usr/local/bin/sysmon-enable

echo "== 4/5 配置 tty1 免密自动登录 =="
install -d -m 0755 /etc/systemd/system/getty@tty1.service.d
cat > /etc/systemd/system/getty@tty1.service.d/autologin.conf <<EOF
[Service]
ExecStart=
ExecStart=-/sbin/agetty --autologin ${TARGET_USER} --noclear %I \$TERM
EOF
systemctl daemon-reload
systemctl enable getty@tty1.service >/dev/null 2>&1

echo "== 5/5 配置 ${TARGET_USER} 的 ~/.bash_profile =="
BP="$TARGET_HOME/.bash_profile"
MARK="# >>> sysmon console dashboard >>>"
[ -f "$BP" ] && cp -a "$BP" "${BP}.bak-$(date +%Y%m%d-%H%M%S)"
if ! grep -qF "$MARK" "$BP" 2>/dev/null; then
    cat >> "$BP" <<'EOF'

# >>> sysmon console dashboard >>>
# 仅在物理控制台 tty1、非 SSH 登录、且未被 sysmon-disable 停用时进入监控面板。
# 面板内 Ctrl-b d 可脱离回普通 shell；命令 sysmon 可再次进入。
if [ -z "${SSH_CONNECTION:-}" ] && [ "$(tty 2>/dev/null)" = "/dev/tty1" ] && [ ! -e "$HOME/.sysmon-off" ]; then
    /usr/local/bin/sysmon.sh
fi
# <<< sysmon console dashboard <<<
EOF
fi
chown "${TARGET_USER}:${TARGET_USER}" "$BP"
chmod 0644 "$BP"

echo
echo "================ 部署完成，自检 ================"
printf 'btop    : '; /usr/local/bin/btop --version 2>&1 | head -1
printf 'nvtop   : '; nvtop --version 2>&1 | head -1
printf 'GPU面板 : '; if strings "$BTOP_DIR/bin/btop" 2>/dev/null | grep -q 'libnvidia-ml'; then echo "有（btop 自带 GPU 框）"; else echo "无（看 GPU 用 nvtop 窗口 / 顶部状态栏）"; fi
printf 'tty1    : '; systemctl show -p ExecStart --value getty@tty1.service 2>/dev/null | head -c 130; echo
printf 'profile : '; printf 'sysmon 启动块 x%s\n' "$(grep -c 'sysmon console dashboard' "$BP")"
echo "================================================"
