#!/bin/bash
# uninstall_init：卸载**之前**执行（应用文件尚未移除）。
#
# 停掉正在运行的服务，避免卸载过程中进程还占着文件与 socket。
set -uo pipefail

SM_HOOK=uninstall_init
SELF_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# shellcheck source=lib.sh
. "$SELF_DIR/lib.sh"

sm_dump_env uninstall_init
sm_log uninstall_init "卸载前停止服务"

# 直接读 pid 文件而不是调 cmd/main：本钩子可能在其之后才被调用，
# 且不应依赖另一个脚本的存在。
pid_file="${TRIM_PKGVAR:-}/app.pid"
if [ -n "${TRIM_PKGVAR:-}" ] && [ -f "$pid_file" ]; then
    pid="$(head -n 1 "$pid_file" 2>/dev/null | tr -d '[:space:]')"
    if [ -n "$pid" ] && kill -0 "$pid" 2>/dev/null; then
        sm_log uninstall_init "发送 TERM 给 pid=$pid"
        kill -TERM "$pid" 2>/dev/null
        waited=0
        while kill -0 "$pid" 2>/dev/null && [ "$waited" -lt 15 ]; do
            sleep 1
            waited=$((waited + 1))
        done
        if kill -0 "$pid" 2>/dev/null; then
            sm_log uninstall_init "超时未退出，发送 KILL"
            kill -KILL "$pid" 2>/dev/null
        fi
    fi
    rm -f "$pid_file" 2>/dev/null
fi

sm_log uninstall_init "服务已停止"
exit 0
