#!/bin/bash
# ============================================================================
#  netdata-kiosk.sh —— 在 2K 屏上用 cage(Wayland kiosk 合成器) 全屏显示 Netdata
#  用法：
#    netdata-kiosk.sh                       正常 kiosk（开机自启走这个）
#    netdata-kiosk.sh --shot [秒] [输出图]   截图验证模式：渲染N秒后抓图并退出
#  环境变量：
#    KIOSK_URL     默认 http://127.0.0.1:19999/
#    KIOSK_CARD    默认 /dev/dri/card2（Intel 核显，显示器接在它的 HDMI 上）
#    KIOSK_BROWSER 默认 epiphany（可换 qutebrowser/falkon）
#  日志：~/kiosk.log（cage 自身）、/tmp/kiosk-browser.log（浏览器）
# ============================================================================
set -u
# 优先 KIOSK_URL 环境变量，其次 ~/.kiosk-url 文件，最后默认 Netdata
URL="${KIOSK_URL:-$(cat "$HOME/.kiosk-url" 2>/dev/null || echo http://127.0.0.1:19999/)}"
CARD="${KIOSK_CARD:-/dev/dri/card2}"
BROWSER="${KIOSK_BROWSER:-epiphany}"
BLOG=/tmp/kiosk-browser.log

export WLR_DRM_DEVICES="$CARD"
export XDG_RUNTIME_DIR="${XDG_RUNTIME_DIR:-/run/user/$(id -u)}"
export GDK_BACKEND=wayland
export MOZ_ENABLE_WAYLAND=1
# WebKit 的 bwrap 沙箱在受限环境里会直接崩，kiosk 场景关掉它
export WEBKIT_DISABLE_SANDBOX_THIS_IS_DANGEROUS=1
export WEBKIT_FORCE_SANDBOX=0

# 浏览器命令：优先套一层 dbus 会话（WebKit/Qt 都需要 session bus）
case "$BROWSER" in
    webkit|webkitgtk|pywebkit)
        # 自用极简 WebKitGTK kiosk（与 epiphany 同引擎，但零 UI）；第三个参数是定时刷新秒数
        BCMD="python3 /usr/local/bin/kiosk-webkit.py '$URL' ${KIOSK_RELOAD:-0} ${KIOSK_ZOOM:-1.3}" ;;
    qutebrowser)
        # Chromium 内核 + 专用 kiosk 配置目录（无标签栏/状态栏/装饰，启动即开大屏）
        # 强制原生 Wayland：否则会去连 Xwayland，在 cage 下会把合成器一起拖死
        KBASEDIR="${KIOSK_QUTE_BASEDIR:-$HOME/.config/qutebrowser-kiosk}"
        BCMD="env QT_QPA_PLATFORM=wayland qutebrowser --basedir '$KBASEDIR' \
--target window '$URL'" ;;
    falkon)
        BCMD="falkon --fullscreen '$URL'" ;;
    epiphany)
        # epiphany：-a 要 .desktop 文件，所以用 private-instance 开普通窗口（会带标题栏/地址栏）
        BCMD="epiphany --private-instance '$URL'" ;;
    *)
        # 默认就用自用 WebKitGTK kiosk
        BCMD="python3 /usr/local/bin/kiosk-webkit.py '$URL' ${KIOSK_RELOAD:-0} ${KIOSK_ZOOM:-1.3}" ;;
esac
if command -v dbus-run-session >/dev/null 2>&1; then
    BCMD="dbus-run-session -- $BCMD"
fi

# 单次截图钩子：放一个 /tmp/kiosk-shot-once，下次 kiosk 启动会渲染 35s 后
# 截图到 /tmp/kiosk-tty1.png 并退出（"看看大屏现在长什么样"，不影响正常使用）
if [ -f /tmp/kiosk-shot-once ] && [ "${1:-}" != "--shot" ]; then
    rm -f /tmp/kiosk-shot-once
    exec "$0" --shot 35 /tmp/kiosk-tty1.png >>"$HOME/kiosk.log" 2>&1
fi

if [ "${1:-}" = "--shot" ]; then
    DELAY="${2:-25}"
    OUT="${3:-/tmp/kiosk.png}"
    rm -f "$BLOG"
    exec cage -s -d -- bash -c "
        $BCMD >>$BLOG 2>&1 &
        BPID=\$!
        sleep $DELAY
        echo \"--- 截图时刻: 浏览器存活? \$(kill -0 \$BPID 2>/dev/null && echo yes || echo no) ---\" >>$BLOG
        grim '$OUT' 2>>$BLOG
        echo \"--- grim rc=\$? size=\$(stat -c%s '$OUT' 2>/dev/null) ---\" >>$BLOG
        sleep 1
        pkill -x epiphany >/dev/null 2>&1
        pkill -x qutebrowser >/dev/null 2>&1
    "
fi

exec cage -s -d -- bash -c "$BCMD >>$BLOG 2>&1"
