#!/bin/bash
# TeachSeek 版本更新脚本（deploy2）
# 用法: 将新版本文件放到 /tmp/teachseek2_update/
#       然后执行: bash /opt/teachseek2/update.sh

set -euo pipefail

APP_DIR="/opt/teachseek2"
UPDATE_DIR="/tmp/teachseek2_update"
PORT=3000

echo "[$(date '+%H:%M:%S')] 开始更新 TeachSeek (deploy2)..."

if [ ! -f "${UPDATE_DIR}/teachseek" ]; then
    echo "ERROR: 更新包不存在: ${UPDATE_DIR}/teachseek"
    exit 1
fi

# 停止服务
echo "停止服务..."
pkill -f "teachseek.*--port ${PORT}" 2>/dev/null || true
sleep 2

# 备份
BACKUP_DIR="/opt/teachseek2.bak.$(date +%Y%m%d%H%M%S)"
cp -r "$APP_DIR" "$BACKUP_DIR"

# 替换文件
cp -f "${UPDATE_DIR}/teachseek" "${APP_DIR}/teachseek"
chmod +x "${APP_DIR}/teachseek"

rm -rf "${APP_DIR}/_internal"
cp -r "${UPDATE_DIR}/_internal" "${APP_DIR}/_internal"

if [ -d "${UPDATE_DIR}/conf" ]; then
    rm -rf "${APP_DIR}/conf"
    cp -r "${UPDATE_DIR}/conf" "${APP_DIR}/conf"
fi

# 复制 dmPython
VENV_DM="/www/git/teachSeek2/v8.0.3/.venv/lib/python3.13/site-packages/dmPython"
if [ -d "$VENV_DM" ]; then
    mkdir -p "${APP_DIR}/_internal/dmPython"
    cp -f "${VENV_DM}/"*.so "${APP_DIR}/_internal/dmPython/" 2>/dev/null || true
    cp -f "${VENV_DM}/"*.py "${APP_DIR}/_internal/dmPython/" 2>/dev/null || true
fi

# 启动
echo "启动服务..."
cd "$APP_DIR"
nohup ./teachseek --host 0.0.0.0 --port "$PORT" > /tmp/teachseek2.log 2>&1 &
PID=$!
echo "$PID" > /tmp/teachseek2.pid
sleep 3

RESP=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:${PORT}/api/health 2>/dev/null || echo "000")
if [ "$RESP" = "401" ] || [ "$RESP" = "200" ]; then
    echo "更新成功！PID: $PID, HTTP $RESP"
else
    echo "WARNING: 健康检查未通过 (HTTP $RESP)"
    tail -20 /tmp/teachseek2.log
fi

rm -rf "$UPDATE_DIR"
echo "完成。"
