#!/bin/bash
# TeachSeek 版本更新脚本（deploy1）
# 用法: 将新版本的 teachseek + _internal/ + conf/ 放到 /tmp/teachseek_update/
#       然后执行: bash /opt/teachseek/update.sh
#
# 此脚本只替换可执行文件和依赖，不修改 .env（保持JWT_SECRET等配置不变）

set -euo pipefail

APP_DIR="/opt/teachseek"
UPDATE_DIR="/tmp/teachseek_update"
SUPERVISORCTL=$(command -v supervisorctl 2>/dev/null || echo "/www/server/panel/pyenv/bin/supervisorctl")

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

# 检查更新包
if [ ! -f "${UPDATE_DIR}/teachseek" ]; then
    echo "ERROR: 更新包不存在: ${UPDATE_DIR}/teachseek"
    echo "请将新版本的 teachseek + _internal/ + conf/ 放到 ${UPDATE_DIR}/"
    exit 1
fi

# 停止服务
echo "停止服务..."
$SUPERVISORCTL stop teachSeek_01 2>/dev/null || true
sleep 2

# 备份当前版本
BACKUP_DIR="/opt/teachseek.bak.$(date +%Y%m%d%H%M%S)"
echo "备份当前版本到 ${BACKUP_DIR}..."
cp -r "$APP_DIR" "$BACKUP_DIR"

# 替换文件（不碰 .env）
echo "替换文件..."
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/teachSeek/v8.0.3/.venv/lib/python3.13/site-packages/dmPython"
if [ -d "$VENV_DM" ]; then
    echo "复制 dmPython..."
    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 "启动服务..."
$SUPERVISORCTL start teachSeek_01
sleep 3

# 健康检查
RESP=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:16524/api/health 2>/dev/null || echo "000")
if [ "$RESP" = "401" ] || [ "$RESP" = "200" ]; then
    echo "[$(date '+%H:%M:%S')] 更新成功！健康检查: HTTP $RESP"
    echo "如需回滚: rm -rf ${APP_DIR} && mv ${BACKUP_DIR} ${APP_DIR} && $SUPERVISORCTL restart teachSeek_01"
else
    echo "WARNING: 健康检查未通过 (HTTP $RESP)，查看日志:"
    tail -20 /www/server/panel/plugin/supervisor/log/teachSeek.out.log
    echo "如需回滚: rm -rf ${APP_DIR} && mv ${BACKUP_DIR} ${APP_DIR} && $SUPERVISORCTL restart teachSeek_01"
fi

# 清理更新包
rm -rf "$UPDATE_DIR"
echo "完成。"
