#!/bin/bash

LOG_FILE="${TRIM_PKGVAR}/${TRIM_APPNAME}.log"
PID_FILE="${TRIM_PKGVAR}/${TRIM_APPNAME}.pid"

APP_DIR="${TRIM_APPDEST}"
APP_ETC_DIR="${TRIM_PKGETC}"

export AGENT_CONFIG_FILE="${APP_ETC_DIR}/agent.json"
export AGENT_STATUS_ADDR="0.0.0.0:58899"
# 显式标记安装渠道，供后台区分飞牛节点与普通 Linux 节点（飞牛的 /etc/os-release
# 与标准 Debian 完全一致，无法靠 platform 字段识别）。agent 会把它随心跳上报。
export AGENT_PACKAGE="fnos"
# 飞牛版永久关闭自动更新：飞牛应用非 root 运行、靠安装钩子 setcap 授探测能力，
# 运行时自我替换二进制会丢掉 cap_net_raw、且飞牛没有 respawn 监管，风险太大。
# 固定走应用中心手动升级。注意：这只关"自动下载替换"，不影响 agent 检查并上报
# "有新版本"——用户打开状态页（58899）仍会看到更新提示，自行去应用中心下载即可。
export AGENT_AUTO_UPDATE="0"
# agent 默认把日志写到 agent.json 同目录的 agent.log；这里改走 stdout，
# 这样才会被 fnOS 的 cmd/main 重定向进 ${LOG_FILE}，"查看日志"功能才能看到。
export AGENT_LOG_STDOUT="1"

SERVICE_COMMAND="$APP_DIR/tcping-agent"
SVC_BACKGROUND=y
SVC_WRITE_PID=y

service_postinst() {
    mkdir -p "${APP_ETC_DIR}"
    chmod +x "${APP_DIR}/tcping-agent" 2>/dev/null || true
    # 授予 raw ICMP 能力（ping/mtr/trace 探测需要），避免以 root 身份整体运行。
    # 应用中心每次手动升级都会重跑安装钩子，重新 setcap，所以手动升级不会丢能力。
    if command -v setcap >/dev/null 2>&1; then
        setcap 'cap_net_raw+ep' "${APP_DIR}/tcping-agent" 2>/dev/null || \
            echo "WARN: setcap failed; icmp trace/mtr 探测可能不可用" >> "${LOG_FILE}"
    fi
}
service_postupgrade() { service_postinst; }

service_preuninst() {
    # 兜底：确保 agent 进程被完全终止
    # 使用 -x 精确匹配进程名，避免误杀包含同名参数的其它进程
    pkill -x "tcping-agent" 2>/dev/null || true
    sleep 1
    pkill -9 -x "tcping-agent" 2>/dev/null || true
}

service_poststop() {
    service_preuninst
}
