#!/bin/bash

# 目标 GTK 图标主题名称
ICON_THEME="bianbu-star"

# 后台异步设置图标主题，避免阻塞锁屏启动关键路径。
# 在高负载/弱性能设备上，gsettings(dconf) 调用可能阻塞数百毫秒甚至数秒；
# 若在 gtklock 之前同步执行，会直接延迟锁屏界面出现（表现为“锁屏特别慢”）。
# 图标主题是持久设置，异步设置不影响后续锁屏，对本次锁屏图标的影响也可忽略，
# 因此放到后台与 gtklock 启动并行执行。
set_icon_theme() {
        command -v gsettings >/dev/null 2>&1 || return 0
        # 空字符串（读取失败）同样 != 目标主题，会触发一次设置，逻辑等价且更简洁
        current_theme=$(gsettings get org.gnome.desktop.interface icon-theme 2>/dev/null | tr -d "'")
        if [ "$current_theme" != "$ICON_THEME" ]; then
                gsettings set org.gnome.desktop.interface icon-theme "$ICON_THEME" 2>/dev/null || true
        fi
}
set_icon_theme &

# 仅在未运行时启动 gtklock
if ! pgrep -x gtklock >/dev/null; then
        # 优先使用用户自定义屏保壁纸
        USER_CONFIG="$HOME/.config/bianbu/screensaver.conf"
        USER_WALLPAPER=""

        if [ -f "$USER_CONFIG" ]; then
                USER_WALLPAPER=$(grep -E "^wallpaper=" "$USER_CONFIG" 2>/dev/null | cut -d'=' -f2-)
        fi

        WALLPAPER=""
        if [ -n "$USER_WALLPAPER" ] && [ -f "$USER_WALLPAPER" ]; then
                WALLPAPER="$USER_WALLPAPER"
        fi

        # 回退到系统默认
        if [ -z "$WALLPAPER" ]; then
                WALLPAPER_BASE="/usr/share/gtklock/lock-wallpapers.jpg"
                if [ -f "${WALLPAPER_BASE}" ]; then
                        WALLPAPER="${WALLPAPER_BASE}"
                fi
        fi

        if [ -n "$WALLPAPER" ]; then
                # 使用 setsid -f 让父进程立即退出，避免 QProcess 误判导致黑屏或错误弹窗。
                # 显式重定向 stdin/stdout/stderr 到 /dev/null：当本脚本经
                # lxqt-leave / loginctl lock-session（liblxqt 下游用 QProcess::startDetached
                # 拉起）触发时，gtklock 继承到的标准 fd 可能处于无效/已关闭状态。此时
                # gtklock 或其依赖库一旦向这些 fd 读写（如打印警告/日志），就会触发
                # EBADF/SIGPIPE，导致 gtklock 在显示锁屏界面前自行退出（表现为“锁不上屏”）。
                # 重定向到有效的 /dev/null 可保证标准 fd 始终有效，规避此类问题。
                setsid -f gtklock -S -b "$WALLPAPER" </dev/null >/dev/null 2>&1
        fi
fi
