#!/bin/bash
# AniBox 影视增强后端生命周期脚本（严格按照飞牛官方退出码：0=运行中 1=失败 3=未运行）。
# 由 fnOS appcenter 在 start/stop/status 时调用。
#
# 注意：Windows 上 fnpack 打包的文件权限位全是 0666（无可执行位），
# 所以 start 前必须 chmod +x 二进制，否则 nohup 直接 Permission denied。

BIN="$TRIM_APPDEST/server/fntvplus"
PIDFILE="$TRIM_PKGVAR/fntvplus.pid"
LOG="$TRIM_PKGVAR/fntvplus.log"
SOCK="$TRIM_APPDEST/fntvplus.sock"

log() { echo "$(date '+%Y-%m-%d %H:%M:%S') [main] $*" >> "$LOG"; }

start() {
  mkdir -p "$TRIM_PKGVAR" "$TRIM_PKGETC" 2>>"$LOG"
  log "==== start requested ===="
  log "BIN=$BIN"
  log "TRIM_SERVICE_PORT=$TRIM_SERVICE_PORT TRIM_PKGETC=$TRIM_PKGETC TRIM_PKGVAR=$TRIM_PKGVAR TRIM_APPDEST=$TRIM_APPDEST"
  # [lc-167] 版本号来源：fnOS 注入的 TRIM_APPVER（取自 manifest version）优先透传给后端；
  #   未注入时后端自行按 manifest 文件多路兜底（旧实现只读 $TRIM_APPDEST/manifest 恒失败→界面显示 vdev）。
  log "version probe: TRIM_APPVER=${TRIM_APPVER:-<empty>}"

  [ -f "$PIDFILE" ] && kill -0 "$(cat "$PIDFILE")" 2>/dev/null && { log "already running (pid $(cat "$PIDFILE"))"; exit 0; }

  if [ ! -f "$BIN" ]; then
    log "ERROR: binary not found at $BIN (app/ 解包位置与预期不符?)"
    ls -la "$TRIM_APPDEST" >>"$LOG" 2>&1
    exit 1
  fi

  chmod +x "$BIN" 2>>"$LOG" || log "WARN: chmod +x failed (继续尝试)"
  log "BIN perms: $(ls -la "$BIN")"

  # ── 安装向导端口配置（wizard/install → install_callback 落盘 wizard.env）──
  #   FNTV_SERVICE_PORT：用户安装时选的服务端口；空则用系统注入的 $TRIM_SERVICE_PORT。
  #     ⚠ manifest service_port 是 fnOS 健康检查(checkport)与访问入口的端口——若系统固定分配，
  #       此处向导值应与其一致（向导默认值即 22350）。
  #   FNTV_UPSTREAM_PORT：飞牛影视(fnOS 影视应用)的 Web 端口；空则走二进制内置优先级
  #     （FNTV_UPSTREAM 环境变量 > TRIM_SYS_WEB_PORT > 默认 5666）。
  SVC_PORT="$TRIM_SERVICE_PORT"
  UPSTREAM_ARG=""
  if [ -f "$TRIM_PKGETC/wizard.env" ]; then
    # shellcheck disable=SC1091
    . "$TRIM_PKGETC/wizard.env"
    if [ -n "$FNTV_SERVICE_PORT" ]; then
      SVC_PORT="$FNTV_SERVICE_PORT"
    fi
    if [ -n "$FNTV_UPSTREAM_PORT" ]; then
      UPSTREAM_ARG="--upstream http://127.0.0.1:$FNTV_UPSTREAM_PORT"
    fi
    log "wizard.env: FNTV_SERVICE_PORT=$FNTV_SERVICE_PORT FNTV_UPSTREAM_PORT=$FNTV_UPSTREAM_PORT"
  fi
  log "effective: SVC_PORT=$SVC_PORT UPSTREAM_ARG=${UPSTREAM_ARG:-<builtin>}"

  nohup "$BIN" \
    --port "$SVC_PORT" \
    --socket "fntvplus.sock" \
    --version "${TRIM_APPVER:-}" \
    $UPSTREAM_ARG \
    --etc "$TRIM_PKGETC" \
    --var "$TRIM_PKGVAR" \
    --dest "$TRIM_APPDEST" \
    >> "$LOG" 2>&1 &
  # Authx 签名材料经环境变量注入后端（不硬编码进二进制/仓库）；未设置则后端不发 Authx 头。
  # 在应用「设置 → 环境变量」中配置 FNTV_AUTHX_KEY / FNTV_AUTHX_SECRET 即启用签名桥。
  echo $! > "$PIDFILE"
  sleep 1
  if kill -0 "$(cat "$PIDFILE")" 2>/dev/null; then
    log "started pid=$(cat "$PIDFILE")"
  else
    log "WARN: process exited immediately, see backend logs below"
  fi
  exit 0
}

stop() {
  log "==== stop requested ===="
  if [ -f "$PIDFILE" ]; then
    kill "$(cat "$PIDFILE")" 2>/dev/null && log "killed pid $(cat "$PIDFILE")"
    rm -f "$PIDFILE"
  fi
  rm -f "$SOCK" 2>/dev/null
  exit 0
}

status() {
  [ -f "$PIDFILE" ] && kill -0 "$(cat "$PIDFILE")" 2>/dev/null && exit 0
  exit 3
}

case "$1" in
  start)  start  ;;
  stop)   stop   ;;
  status) status ;;
  *) echo "usage: $0 {start|stop|status}" >&2; exit 1 ;;
esac
