#!/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` 会阻塞 rcS，故任何 S90 之后
#     的 init.d 都不执行——sysui 必须排在 S90 之前（S70 满足）。
#
# 职责：监管系统进程（launcher / meow_svcd / meow_mdns / …），一个崩只拉起它、绝不级联。
#   本脚本只做三件事：
#     1) 预置板载监管配置 /usr/data/meow/sysui.d/*.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 当前由 S90meow_bootmenu 的 exec 拥有生命周期；待 bootmenu 让位后交 sysui。
        # 此处仅登记（enabled=0），避免双重拉起。mdns 是 svcd 的服务子进程，由 svcd 负责，
        # 本阶段不直接监管（或作兜底条目，默认关）。
        if [ -f /usr/data/meow/sysui.d/launcher.conf ]; then
            echo -n "launcher.conf exists "
        else
            cat > /usr/data/meow/sysui.d/launcher.conf <<'EOF'
# 预留：launcher（系统 UI 渲染宿主）。现网由 S90meow_bootmenu exec 拥有 → 启用前需 bootmenu 让位。
# 真把 launcher 交给 sysui 监管后，把 enabled=1（并停用 bootmenu 的 exec launcher 路径）。
exec=/usr/bin/meow_launcherd
args=
enabled=0
restart=always
backoff_ms=3000
max_restart=5
EOF
            chmod 644 /usr/data/meow/sysui.d/launcher.conf
            echo -n "provisioned launcher.conf "
        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
