#!/bin/sh
#
# S70meow_sysui - MeowOS 系统进程总监（Supervisor Tree 顶层）
#
# 位置：**最早**（早于 S84ssh / S89meow_svcd / S90meow_bootmenu）。
#   * 定案启动链：meow_sysui 先起（S70）→ meow_svcd（由 sysui 拉起）→ 各项服务子进程。
#   * S90meow_bootmenu `exec /usr/bin/meow_bootmenu --fork`：HibyOS 模式 fork 播放器并转监督者，
#     阻塞 rcS；MeowOS 模式在 sysui 托管下让位退出（rcS 推进，S92 见 mode=meow 跳过播放器）。
#     故 sysui 必须排在 S90 之前（S70 满足）——launcher 已在 S70 由 sysui 拉起。
#
# 职责：监管系统进程（launcher / meow_svcd / meow_mdns / …），一个崩只拉起它、绝不级联。
#   本脚本只做三件事：
#     1) 预置板载监管配置 /usr/data/meow/sysui.d/*.conf（首启建；除 launcher.conf 迁移升级外已存在不覆盖）；
#     2) 拉起 meow_sysui（默认后台 daemon）；
#     3) stop 时优雅停 sysui（其会 SIGTERM 被监管的 svcd 并收尸）。
#
# 红线：不 killall、不碰播放器信号、不刷机、不碰 recovery_all。sysui 自身最小依赖，
#   失败兜底（某被监管进程起不来 → 仅记日志 + 有限次重试，不阻塞其它/不拖垮自身）。
#
case "$1" in
  start)
    echo -n "Starting meow_sysui (S70): "

    # 1) 预置板载监管配置（Data 区可写才建；已存在不覆盖）
    if [ -d /usr/data/meow ] && [ -w /usr/data/meow ]; then
        mkdir -p /usr/data/meow/sysui.d
        if [ -f /usr/data/meow/sysui.d/svcd.conf ]; then
            echo -n "svcd.conf exists "
        else
            cat > /usr/data/meow/sysui.d/svcd.conf <<'EOF'
# meow_sysui 监管条目：meow_svcd（服务管理器）。系统进程总监 → svcd 被监管 → 服务为 svcd 子进程。
# 语义同 services.d：key=value，'#'/';' 注释，未知键忽略。无 trigger——enabled=1 即常驻监护。
exec=/usr/bin/meow_svcd
args=-f
enabled=1
restart=always
backoff_ms=3000
max_restart=5
EOF
            chmod 644 /usr/data/meow/sysui.d/svcd.conf
            echo -n "provisioned svcd.conf "
        fi
        # launcher 监管（M2.83 迁移）：已交 sysui 托管——bootmenu 在 MeowOS 模式让位（sysui 在则
        # 不再 exec launcher，lifecycle 归 sysui：崩→sysui 按 restart=always 重启；bootmenu 仅在
        # sysui 不在时兜底 exec）。故此处 enabled=1。检测到旧版（enabled=0，bootmenu 时代）→ 升级。
        # mdns 是 svcd 的服务子进程，由 svcd 负责，本阶段不直接监管（或作兜底条目，默认关）。
        LAUNCHER_UPGRADE=''
        if [ -f /usr/data/meow/sysui.d/launcher.conf ]; then
            if grep -qE '^[[:space:]]*enabled[[:space:]]*=[[:space:]]*0([[:space:]]|#|$)' /usr/data/meow/sysui.d/launcher.conf; then
                LAUNCHER_UPGRADE=1
            else
                echo -n "launcher.conf exists "
            fi
        fi
        if [ -n "$LAUNCHER_UPGRADE" ] || [ ! -f /usr/data/meow/sysui.d/launcher.conf ]; then
            cat > /usr/data/meow/sysui.d/launcher.conf <<'EOF'
# meow_sysui 监管条目：launcher（系统 UI 渲染宿主）。系统进程总监 → launcher 被监管。
# 语义同 services.d：key=value，'#'/';' 注释，未知键忽略。无 trigger——enabled=1 即常驻监护。
# M2.83 launcher 监管迁移：bootmenu 在 MeowOS 模式让位（sysui 在则不 exec launcher），
# launcher 生命周期归 sysui：崩→sysui 按 restart=always 重启；bootmenu 仅在 sysui 不在时兜底。
exec=/usr/bin/meow_launcherd
args=
enabled=1
restart=always
backoff_ms=3000
max_restart=5
EOF
            chmod 644 /usr/data/meow/sysui.d/launcher.conf
            if [ -n "$LAUNCHER_UPGRADE" ]; then
                echo -n "upgraded launcher.conf (enabled 0->1) "
            else
                echo -n "provisioned launcher.conf "
            fi
        fi
    else
        echo -n "skip provision (/usr/data/meow not writable) "
    fi

    # 2) 拉起 meow_sysui（默认后台 daemon；S89meow_svcd 会因 sysui 在而把 svcd 拉起权交还 sysui）
    rm -f /tmp/meow_sysui.stop
    if [ -x /usr/bin/meow_sysui ]; then
        if [ -f /tmp/meow_sysui.pid ] && kill -0 "$(cat /tmp/meow_sysui.pid 2>/dev/null)" 2>/dev/null; then
            echo "already running"
        else
            /usr/bin/meow_sysui
            echo "started"
        fi
    else
        echo "MISSING /usr/bin/meow_sysui"
    fi
    ;;
  stop)
    echo -n "Stopping meow_sysui: "
    touch /tmp/meow_sysui.stop
    for p in $(ps | grep "[m]eow_sysui" | awk '{print $1}'); do kill "$p" 2>/dev/null; done
    echo "OK"
    ;;
  restart|reload)
    ;;
  *)
    echo "Usage: $0 {start|stop}"
    exit 1
    ;;
esac

exit 0
