#!/bin/bash

# ============================================
# sanguo_vnpy 端到端全自动化 CI/CD 回测
# 作者：姜维 伯约
# 日期：2026年3月28日
# ============================================

set -e

# 配置信息
NAS_IP="192.168.2.154"
NAS_USER="admin"
SANGUO_PROJECT_DIR="/Users/chufeng/.openclaw/sanguo_projects/sanguo_quant_live"
NAS_TARGET_DIR="/volume1/stock/sanguo_vnpy"
DOCKER_CONTAINER_NAME="sanguo_vnpy"

# 说明：
# 这个方案会同步整个 sanguo_quant_live 项目，包括：
# - strategies/        所有策略
# - sanguo_vnpy/      框架代码（包括修改后的vnpy）
# - jiangwei-platform/ 三国量化实战项目
# - pangtong-value/   价值投资研究
# - 所有其他模块

# 颜色
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'

log_info() {
    echo -e "${GREEN}[INFO]${NC} $1"
}

log_warn() {
    echo -e "${YELLOW}[WARN]${NC} $1"
}

log_error() {
    echo -e "${RED}[ERROR]${NC} $1"
}

# 步骤 1: 拉取最新代码
pull_latest_code() {
    log_info "步骤 1/6: 拉取最新代码"
    
    cd "$SANGUO_PROJECT_DIR"
    
    if git pull origin main; then
        log_info "✅ 代码已更新到最新版本"
        return 0
    else
        log_error "❌ 拉取代码失败"
        return 1
    fi
}

# 步骤 2: 同步所有文件到 NAS
sync_to_nas() {
    log_info "步骤 2/6: 同步所有文件到 NAS"
    
    # 确保目标目录存在
    ssh "$NAS_USER@$NAS_IP" "mkdir -p $NAS_TARGET_DIR"
    
    # 使用 rsync 同步所有文件（包括策略和框架代码）
    # 会同步整个 sanguo_quant_live 项目，包括：
    # - strategies/        所有策略
    # - sanguo_vnpy/      框架代码（包括您修改后的 vnpy）
    # - jiangwei-platform/ 三国量化实战
    # - pangtong-value/   价值投资研究
    # - 所有其他模块
    rsync -av --delete \
        "$SANGUO_PROJECT_DIR"/ \
        "$NAS_USER@$NAS_IP:$NAS_TARGET_DIR"/ \
        --exclude='.git' \
        --exclude='__pycache__' \
        --exclude='*.log' \
        --exclude='*.pyc' \
        --exclude='.ipynb_checkpoints' \
        --exclude='backtest_results/*.png' \
        --exclude='.DS_Store'
    
    log_info "✅ 文件同步完成"
}

# 步骤 3: 重建 Docker 容器
rebuild_docker() {
    log_info "步骤 3/6: 重建 Docker 容器"
    
    ssh "$NAS_USER@$NAS_IP" << 'EOF'
cd /volume1/stock/sanguo_vnpy

# 停止并删除旧容器
if docker ps -a | grep -q sanguo_vnpy; then
    docker stop sanguo_vnpy
    docker rm sanguo_vnpy
fi

# 构建新镜像
docker-compose build --no-cache

# 启动新容器
docker-compose up -d

# 等待容器启动
sleep 10

# 检查容器状态
if docker ps | grep -q sanguo_vnpy; then
    echo "✅ 容器启动成功"
else
    echo "❌ 容器启动失败"
    exit 1
fi
EOF

    if [ $? -eq 0 ]; then
        log_info "✅ Docker 容器重建完成"
        return 0
    else
        log_error "❌ Docker 容器重建失败"
        return 1
    fi
}

# 步骤 4: 运行自动化回测
run_backtest() {
    log_info "步骤 4/6: 运行自动化回测"
    
    ssh "$NAS_USER@$NAS_IP" << 'EOF'
cd /volume1/stock/sanguo_vnpy/scripts

# 运行全自动化回测
./run_backtest_auto.sh
EOF

    if [ $? -eq -ne 0 ]; then
        log_warn "回测运行中，请等待完成..."
    fi
    
    log_info "✅ 回测已启动"
}

# 步骤 5: 获取结果
get_results() {
    log_info "步骤 5/6: 获取回测结果"
    
    # 创建本地结果目录
    mkdir -p "./backtest_results"
    
    # 下载最新结果
    rsync -av --delete \
        "$NAS_USER@$NAS_IP:$NAS_TARGET_DIR/backtest_results/"* \
        "./backtest_results"/
    
    log_info "✅ 结果已下载到本地: ./backtest_results/"
    
    # 显示最新结果
    LATEST_RESULT=$(ls -t ./backtest_results/*.txt | head -1)
    if [ -f "$LATEST_RESULT" ]; then
        echo ""
        echo "============================================"
        echo "  📊 最新回测结果"
        echo "============================================"
        echo ""
        cat "$LATEST_RESULT"
        echo ""
        echo "============================================"
    fi
}

# 步骤 6: 完成通知
finish() {
    log_info "步骤 6/6: 完成！"
    
    echo ""
    echo "╔═════════════════════════════════════════════════════════════════╗"
    echo "║           🎉 端到端自动化回测完成！                             ║"
    echo "╚═════════════════════════════════════════════════════════════════╝"
    echo ""
    echo "📍 结果位置："
    echo "   NAS: $NAS_TARGET_DIR/backtest_results/"
    echo "   本地: ./backtest_results/"
    echo ""
    echo "🚀 下次更新代码后，直接运行 ./sanguo_nas_ci_cd.sh 就能全自动完成！"
    echo ""
}

# 主函数
main() {
    echo "============================================"
    echo "  sanguo_vnpy 端到端全自动化回测"
    echo "============================================"
    echo ""
    
    pull_latest_code     && \
    sync_to_nas          && \
    rebuild_docker      && \
    run_backtest        && \
    get_results         && \
    finish
    
    echo ""
}

# 运行
main
