#!/bin/bash
# 由 KasmVNC base 的 openbox 会话在桌面就绪后执行（以 app 用户身份）。
# v1.2.0 多应用：实例承载的应用（微信/Telegram/Chromium/自定义）由面板写入容器环境 WOC_APP_TYPE，
# 再由 02-woc-app 钩子落到数据卷 /config/.woc-app。本脚本据此等待对应应用就绪并常驻拉起
# （关窗自动重开；更新后从新版本路径重启）。读不到类型 → 回退微信，老实例零改动。

set -u

# 容器内无 GPU，强制软件渲染
export LIBGL_ALWAYS_SOFTWARE=1

# 解析本实例应用类型与启动信息（APP_BIN / APP_LAUNCH / APP_NAME）
APP_TYPE=wechat
# shellcheck source=/dev/null
[ -f /config/.woc-app ] && . /config/.woc-app 2>/dev/null || true
APP_TYPE="${WOC_APP_TYPE:-wechat}"
# shellcheck source=/dev/null
. /woc/app-defs.sh
woc_app_def "$APP_TYPE"

# 深色模式（实例环境 WOC_DARK=1 时；由面板顶栏主题开关持久化、经容器环境下发，改后需重启实例生效）。
# 仅浏览器(Chromium)：加 --force-dark-mode 让其 UI + 网页走深色——这是极简容器里实测唯一稳的办法。
# 微信：内核虽是 Chromium 但不吃命令行参数，也不订阅桌面 portal 的 color-scheme 信号（实测 portal 方案在
# 极简容器里 session 总线不稳、微信也不跟随），故本开关对微信无效；微信深色请在微信「设置→通用→深色模式」
# 里手动选（设置随数据卷持久化）。
if { [ "${WOC_DARK:-}" = "1" ] || [ "${WOC_DARK:-}" = "true" ]; } && [ "$APP_TYPE" = "chromium" ]; then
    APP_LAUNCH="${APP_LAUNCH} --force-dark-mode --enable-features=WebContentsForceDark"
    echo "[autostart] 浏览器深色已启用（--force-dark-mode）"
fi

# 防“最小化后丢失”：本桌面（openbox）无任务栏，窗口被最小化就无处恢复 → 黑屏。
# 看守进程：每 2s 把“被最小化（不可见）”的顶层窗口重新激活，相当于禁用最小化。对任意应用通用。
(
    export DISPLAY="${DISPLAY:-:1}"
    while sleep 2; do
        all=$(xdotool search --name '.+' 2>/dev/null) || continue
        vis=$(xdotool search --onlyvisible --name '.+' 2>/dev/null)
        for w in ${all}; do
            printf '%s\n' "${vis}" | grep -qx "${w}" || xdotool windowactivate "${w}" 2>/dev/null || true
        done
    done
) &

# 自定义应用若未配置启动命令，给出提示并退出（避免空等）
if [ "$APP_TYPE" = "custom" ] && [ -z "${APP_LAUNCH:-}" ]; then
    echo "[autostart] 自定义应用尚未配置启动命令，请在面板「数据卷」上传安装包并设定后重启实例"
    exit 0
fi

# 1) 等待应用安装就绪（首次需在面板点「下载并安装」）
notified=0
while [ -n "${APP_BIN:-}" ] && [ ! -x "${APP_BIN}" ]; do
    if [ "${notified}" -eq 0 ]; then
        echo "[autostart] ${APP_NAME} 尚未安装，等待面板触发下载…（首次使用请在面板点「下载并安装」）"
        notified=1
    fi
    sleep 2
done

# 3) 常驻拉起应用
while true; do
    if [ -n "${APP_BIN:-}" ] && [ ! -x "${APP_BIN}" ]; then
        # 更新过程中本体被临时挪走，等就位再继续
        sleep 2
        continue
    fi
    echo "[autostart] 启动 ${APP_NAME}: ${APP_LAUNCH}"
    # APP_LAUNCH 可带参数，按 word-split 执行（各应用参数均不含空格，见 app-defs.sh）
    ${APP_LAUNCH}
    echo "[autostart] ${APP_NAME} 已退出，2 秒后重启"
    sleep 2
done
