#!/bin/bash
# CertDock 启停脚本（由飞牛系统调用：start / stop / status）
. "$(dirname "$0")/lib.sh"

# 运行环境校验：非飞牛环境误跑时给出中文错误
require_env TRIM_APPDEST TRIM_PKGVAR TRIM_PKGHOME TRIM_USERNAME TRIM_SYS_ARCH

LOG_FILE="${TRIM_PKGVAR}/app.log"
PID_FILE="${TRIM_PKGVAR}/app.pid"
SOCKET_PATH="${TRIM_APPDEST}/certdock.sock"
SERVER_BIN="${TRIM_APPDEST}/server/certdock-server"

start_app() {
  if status_app; then
    return 0
  fi
  if [ ! -x "$SERVER_BIN" ]; then
    fail_msg "错误：未找到可执行文件 ${SERVER_BIN}（系统架构 ${TRIM_SYS_ARCH}）"
    return 1
  fi
  log_msg "$LOG_FILE" "启动 CertDock（架构 ${TRIM_SYS_ARCH}）..."
  # 本地托管（证书归档）导出目录：0.1.58 起由服务端从平台环境变量推导候选
  # （TRIM_DATA_SHARE_PATHS 声明的共享目录 + TRIM_DATA_ACCESSIBLE_PATHS 用户授权目录 +
  #  私有回退 <data>/export），不再经 --share 传单一目录；默认位置保持既有语义。
  # 数据目录 = TRIM_PKGVAR（@appdata）。0.1.15 及更早放在 TRIM_PKGHOME（@apphome），
  # 但飞牛在每次（重新）安装时会重建 @apphome、且「手动安装」会先跑卸载回调——
  # 2026-10-09 事故后改为 @appdata 并配合"安装不删数据"的卸载回调（见 uninstall_callback 注释）。
  # 真机验证：飞牛生命周期脚本已以应用包用户运行（非 root），无需降权；
  # 仅当未来由 root 调用时才显式降权到包用户，保证长期服务不持有 root 权限。
  if [ "$(id -u)" -eq 0 ] && command -v runuser >/dev/null 2>&1; then
    runuser -u "$TRIM_USERNAME" -- "$SERVER_BIN" \
      --socket "$SOCKET_PATH" \
      --data "$TRIM_PKGVAR" >>"$LOG_FILE" 2>&1 &
  else
    "$SERVER_BIN" \
      --socket "$SOCKET_PATH" \
      --data "$TRIM_PKGVAR" >>"$LOG_FILE" 2>&1 &
  fi
  echo "$!" >"$PID_FILE"
  # 启动后立即校验进程真实存活，避免系统误报"已启动"
  sleep 1
  if ! status_app; then
    fail_msg "错误：CertDock 启动失败，请查看日志 ${LOG_FILE}"
    return 1
  fi
}

case "$1" in
start) start_app ;;
stop) stop_app ;;
status)
  if status_app; then
    exit 0
  else
    exit 3
  fi
  ;;
*)
  echo "未知命令: $1" >&2
  exit 1
  ;;
esac
