#!/usr/bin/env sh
# 在 Docker 容器内后台启动 pdf_converter_v2 API 服务，并写日志
# 使用：在 Clerk2.5 根目录执行 sh start_api_in_container.sh，或在 pdf_converter_v2 下执行 sh scripts/start_api_in_container.sh
# 工作目录：脚本会自动进入 pdf_converter_v2 所在目录（含 api_server.py）
# 日志：默认 $CLERK_ROOT/logs/pdf-converter-v2-api.log，可通过 PDF_CONVERTER_API_LOG 覆盖
# 端口：默认 4214，可通过 PDF_CONVERTER_API_PORT 覆盖

set -e
# 兼容 sh/bash：用 $0 取脚本所在目录（sh 下无 BASH_SOURCE）
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
# 若脚本在 pdf_converter_v2/scripts/ 下，则上一级即 pdf_converter_v2；若在 Clerk2.5 根下，则用 Clerk2.5/pdf_converter_v2
if [ -f "$SCRIPT_DIR/../api_server.py" ]; then
  PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
else
  if [ -f "$SCRIPT_DIR/pdf_converter_v2/api_server.py" ]; then
    PROJECT_ROOT="$SCRIPT_DIR/pdf_converter_v2"
  else
    echo "错误: 未找到 api_server.py，请从 Clerk2.5 或 pdf_converter_v2 目录执行本脚本" >&2
    exit 1
  fi
fi
CLERK_ROOT="${CLERK_ROOT:-$(cd "$PROJECT_ROOT/.." 2>/dev/null && pwd || echo "$PROJECT_ROOT")}"
PORT="${PDF_CONVERTER_API_PORT:-4214}"
LOG_DIR="${CLERK_ROOT}/logs"
LOG_FILE="${PDF_CONVERTER_API_LOG:-${LOG_DIR}/pdf-converter-v2-api.log}"
PID_FILE="${LOG_DIR}/pdf-converter-v2-api.pid"

# NPU 容器内：PaddleOCR 走 NPU，MinerU 用 pipeline
export PADDLE_OCR_DEVICE="${PADDLE_OCR_DEVICE:-npu:0}"
export BACKEND="${BACKEND:-pipeline}"
export API_URL="${API_URL:-http://127.0.0.1:5282}"

mkdir -p "$LOG_DIR"
cd "$PROJECT_ROOT"

# 若已有 PID 文件且进程存在，先提示
if [ -f "$PID_FILE" ]; then
  OLD_PID=$(cat "$PID_FILE")
  if kill -0 "$OLD_PID" 2>/dev/null; then
    echo "已有进程在运行 PID=$OLD_PID，日志: $LOG_FILE" >&2
    exit 1
  fi
  rm -f "$PID_FILE"
fi

nohup python3 api_server.py --host 0.0.0.0 --port "$PORT" >> "$LOG_FILE" 2>&1 &
echo $! > "$PID_FILE"
echo "已后台启动 pdf_converter_v2 API，端口 $PORT"
echo "  PID:  $(cat $PID_FILE)"
echo "  日志: $LOG_FILE"
echo "  查看: tail -f $LOG_FILE"
