#!/bin/bash
# 部署回滚脚本 - 回滚到上一个稳定版本

set -e

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

print_success() {
    echo -e "${GREEN}[SUCCESS] $1${NC}"
}

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

print_warning() {
    echo -e "${YELLOW}[WARNING] $1${NC}"
}

print_info() {
    echo -e "${BLUE}[INFO] $1${NC}"
}

WORK_DIR="/opt/FzxBDSH"
COMPOSE_FILE="infrastructure/compose/podman-compose.aliyun-dev.yml"
BACKUP_DIR="$WORK_DIR/backup"

# 检查参数
if [ $# -eq 0 ]; then
    echo "用法: $0 <backup_version>"
    echo "示例: $0 v1.0.0-dev"
    exit 1
fi

BACKUP_VERSION=$1

echo "=========================================="
echo "🔄 部署回滚脚本"
echo "=========================================="
echo "回滚版本: $BACKUP_VERSION"
echo ""

# 1. 停止当前服务
echo "[步骤1/5] 停止当前运行的服务..."
cd $WORK_DIR/infrastructure/compose
podman-compose -f $COMPOSE_FILE down
print_success "服务已停止"

# 2. 检查备份版本是否存在
echo ""
echo "[步骤2/5] 检查备份版本..."
BACKUP_FILE="$BACKUP_DIR/deploy_backup_$BACKUP_VERSION.tar.gz"
if [ -f "$BACKUP_FILE" ]; then
    print_success "找到备份文件: $BACKUP_FILE"
else
    print_error "未找到备份文件: $BACKUP_FILE"
    echo "可用备份版本:"
    ls -la $BACKUP_DIR/*.tar.gz 2>/dev/null || echo "  无可用备份"
    exit 1
fi

# 3. 恢复备份
echo ""
echo "[步骤3/5] 恢复备份..."
mkdir -p $WORK_DIR/temp_backup
tar -xzf $BACKUP_FILE -C $WORK_DIR/temp_backup

# 恢复关键文件
cp -r $WORK_DIR/temp_backup/services/* $WORK_DIR/services/ 2>/dev/null || true
cp -r $WORK_DIR/temp_backup/frontend/* $WORK_DIR/frontend/ 2>/dev/null || true
cp -r $WORK_DIR/temp_backup/infrastructure/* $WORK_DIR/infrastructure/ 2>/dev/null || true

# 清理临时目录
rm -rf $WORK_DIR/temp_backup
print_success "备份恢复完成"

# 4. 重新构建镜像
echo ""
echo "[步骤4/5] 重新构建镜像..."
cd $WORK_DIR/infrastructure/compose

# 重新启动服务
podman-compose -f $COMPOSE_FILE up -d
print_success "服务已启动"

# 5. 验证回滚结果
echo ""
echo "[步骤5/5] 验证回滚结果..."

# 等待服务启动
sleep 60

# 检查容器状态
non_running=$(podman ps -a | grep -v 'Up' | grep -v 'NAMES' | wc -l)
if [ "$non_running" -eq 0 ]; then
    print_success "所有容器运行正常"
else
    print_error "有 $non_running 个容器未正常启动"
    podman ps -a
    exit 1
fi

# 检查API网关
gateway_response=$(curl -s http://localhost:8080/actuator/health)
if echo "$gateway_response" | grep -q "UP"; then
    print_success "API网关健康检查通过"
else
    print_error "API网关健康检查失败"
    exit 1
fi

echo ""
echo "=========================================="
echo "🎉 回滚完成!"
echo "=========================================="
echo ""
echo "回滚版本: $BACKUP_VERSION"
echo "回滚时间: $(date)"
echo ""

# 保存回滚记录
echo "回滚版本: $BACKUP_VERSION" > $WORK_DIR/rollback_log.txt
echo "回滚时间: $(date)" >> $WORK_DIR/rollback_log.txt
echo "回滚结果: 成功" >> $WORK_DIR/rollback_log.txt
