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

require_env TRIM_APPDEST TRIM_PKGVAR TRIM_USERNAME TRIM_SYS_ARCH

LOG_FILE="${TRIM_PKGVAR}/logs/app.log"
PID_FILE="${TRIM_PKGVAR}/app.pid"
SOCKET_PATH="${TRIM_APPDEST}/assetflow.sock"
SERVER_BIN="${TRIM_APPDEST}/server/assetflow-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
  if ! mkdir -p "${TRIM_PKGVAR}/logs"; then
    fail_msg "错误：无法创建日志目录 ${TRIM_PKGVAR}/logs"
    return 1
  fi
  log_msg "$LOG_FILE" "启动 AssetFlow（架构 ${TRIM_SYS_ARCH}）..."
  # 数据目录固定为 TRIM_PKGVAR（@appdata）；TRIM_PKGHOME 每次安装会重建，不放数据。
  # 生命周期脚本通常已以应用包用户运行；仅当被 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"

  # 启动后健康检查：优先用 curl --unix-socket 探测 /api/health，失败再退回进程存活检查。
  if command -v curl >/dev/null 2>&1; then
    local i=0
    while [ "$i" -lt 5 ]; do
      if curl -fsS --unix-socket "$SOCKET_PATH" http://localhost/api/health >/dev/null 2>&1; then
        return 0
      fi
      sleep 1
      i=$((i + 1))
    done
    fail_msg "错误：AssetFlow 启动后健康检查失败，请查看日志 ${LOG_FILE}"
    stop_app
    return 1
  fi
  sleep 1
  if ! status_app; then
    fail_msg "错误：AssetFlow 启动失败，请查看日志 ${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
