#!/bin/bash

# QAUP 程序更新打包脚本
# 用于生成仅包含jar文件的更新包

set -e

SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"

# 颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
BLUE='\033[0;34m'
NC='\033[0m'

print_message() {
    echo -e "${1}${2}${NC}"
}

print_message $BLUE "=== QAUP 程序更新打包 ==="

# 1. 构建应用
print_message $BLUE "构建应用..."
cd "$PROJECT_ROOT"
mvn clean package -DskipTests -q

# 检查jar文件是否生成成功
JAR_FILE="$PROJECT_ROOT/qaup-admin/target/qaup-admin.jar"
if [ ! -f "$JAR_FILE" ]; then
    print_message $RED "❌ jar文件构建失败"
    exit 1
fi

# 2. 创建更新包目录
UPDATE_DIR="qaup-update-$(date +%Y%m%d-%H%M%S)"
mkdir -p "$UPDATE_DIR"

# 3. 复制jar文件
print_message $BLUE "准备更新文件..."
cp "$JAR_FILE" "$UPDATE_DIR/qaup-admin.jar"

# 4. 创建更新说明
cat > "$UPDATE_DIR/UPDATE-INSTRUCTIONS.md" << 'EOF'
# QAUP 程序更新包

## 包含内容
- `qaup-admin.jar` - 新版本应用程序

## 更新步骤

### 1. 上传文件到服务器
将 `qaup-admin.jar` 上传到服务器的 qaup-deploy 目录

### 2. 重命名文件
```bash
cd qaup-deploy
cp qaup-admin.jar new-app.jar
```

### 3. 执行更新
```bash
./update.sh
```

### 4. 验证更新
```bash
# 检查服务状态
docker compose ps

# 检查应用日志
docker compose logs -f qaup-app

# 访问系统确认功能正常
curl http://localhost:8080/actuator/health
```

## 注意事项
- 更新前建议备份数据库
- 如果更新失败，脚本会自动回滚
- 如有问题，请查看完整的部署更新说明文档
EOF

# 5. 创建版本信息
cat > "$UPDATE_DIR/VERSION-INFO.txt" << EOF
QAUP 程序更新包
构建时间: $(date)
构建主机: $(hostname)
Git提交: $(git rev-parse --short HEAD 2>/dev/null || echo "未知")
Maven版本: $(mvn --version | head -1)
Java版本: $(java -version 2>&1 | head -1)
文件大小: $(du -sh "$JAR_FILE" | cut -f1)
文件MD5: $(md5sum "$JAR_FILE" | cut -d' ' -f1)
EOF

# 6. 创建更新包
PACKAGE_NAME="${UPDATE_DIR}.zip"
zip -r "$PACKAGE_NAME" "$UPDATE_DIR/"

# 7. 清理临时目录
rm -rf "$UPDATE_DIR"

print_message $GREEN "✅ 程序更新包创建完成: $PACKAGE_NAME"
print_message $BLUE "包大小: $(du -sh "$PACKAGE_NAME" | cut -f1)"

echo ""
echo "使用说明:"
echo "1. 将 $PACKAGE_NAME 发送给客户"
echo "2. 客户解压后按照 UPDATE-INSTRUCTIONS.md 操作"
echo "3. 或者直接发送 qaup-admin.jar 文件给客户"