#!/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"
# 飞牛版应用没有权限自我替换可执行文件（setcap/目录权限只在包管理器的安装/升级钩子里
# 生效一次，运行时自更新会绕过这一步），一旦升级失败或替换后丢失 cap_net_raw，探测能力
# 会跟着失效、甚至整个进程失联。飞牛这边固定用应用中心手动升级安装包，永久关闭自动更新。
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 身份整体运行
    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
}
