#!/bin/bash

# BearVPN macOS DMG 打包脚本
# 作者: Collins
# 日期: $(date)

set -e

# 配置变量
APP_NAME="BearVPN"
APP_VERSION="1.0.0"
DMG_NAME="${APP_NAME}-${APP_VERSION}-macOS"
APP_PATH="build/macos/Build/Products/Release/${APP_NAME}.app"
DMG_PATH="build/macos/Build/Products/Release/${DMG_NAME}.dmg"
TEMP_DMG_PATH="build/macos/Build/Products/Release/temp_${DMG_NAME}.dmg"

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

# 日志函数
log_info() {
    echo -e "${BLUE}[INFO]${NC} $1"
}

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

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

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

# 检查应用是否存在
check_app() {
    log_info "检查应用文件..."
    if [ ! -d "$APP_PATH" ]; then
        log_error "应用文件不存在: $APP_PATH"
        log_info "请先运行: flutter build macos --release"
        exit 1
    fi
    log_success "应用文件检查通过"
}

# 清理旧的 DMG 文件
cleanup() {
    log_info "清理旧的 DMG 文件..."
    rm -f "$DMG_PATH" "$TEMP_DMG_PATH"
    log_success "清理完成"
}

# 创建 DMG
create_dmg() {
    log_info "开始创建 DMG 文件..."
    
    # 使用 create-dmg 创建 DMG
    create-dmg \
        --volname "$APP_NAME" \
        --volicon "macos/Runner/Assets.xcassets/AppIcon.appiconset/icon-256@2x.png" \
        --window-pos 200 120 \
        --window-size 600 400 \
        --icon-size 100 \
        --icon "$APP_NAME.app" 175 190 \
        --hide-extension "$APP_NAME.app" \
        --app-drop-link 425 190 \
        --no-internet-enable \
        "$DMG_PATH" \
        "$APP_PATH"
    
    if [ $? -eq 0 ]; then
        log_success "DMG 文件创建成功: $DMG_PATH"
    else
        log_error "DMG 文件创建失败"
        exit 1
    fi
}

# 验证 DMG
verify_dmg() {
    log_info "验证 DMG 文件..."
    
    # 检查文件大小
    DMG_SIZE=$(du -h "$DMG_PATH" | cut -f1)
    log_info "DMG 文件大小: $DMG_SIZE"
    
    # 检查文件类型
    FILE_TYPE=$(file "$DMG_PATH")
    log_info "文件类型: $FILE_TYPE"
    
    # 尝试挂载 DMG 验证
    log_info "验证 DMG 内容..."
    MOUNT_POINT=$(hdiutil attach "$DMG_PATH" -nobrowse | grep -E '^/dev/' | sed 1q | awk '{print $3}')
    
    if [ -n "$MOUNT_POINT" ]; then
        log_success "DMG 挂载成功: $MOUNT_POINT"
        
        # 检查应用是否在 DMG 中
        if [ -d "$MOUNT_POINT/$APP_NAME.app" ]; then
            log_success "应用文件在 DMG 中验证成功"
        else
            log_error "应用文件在 DMG 中未找到"
        fi
        
        # 卸载 DMG
        hdiutil detach "$MOUNT_POINT" -quiet
        log_info "DMG 已卸载"
    else
        log_error "DMG 挂载失败"
        exit 1
    fi
}

# 显示结果
show_result() {
    log_success "=========================================="
    log_success "DMG 打包完成！"
    log_success "=========================================="
    log_info "应用名称: $APP_NAME"
    log_info "版本: $APP_VERSION"
    log_info "DMG 文件: $DMG_PATH"
    log_info "文件大小: $(du -h "$DMG_PATH" | cut -f1)"
    log_success "=========================================="
    log_info "你可以将 DMG 文件分发给用户安装"
    log_info "用户双击 DMG 文件，然后将应用拖拽到 Applications 文件夹即可"
}

# 主函数
main() {
    log_info "开始 BearVPN macOS DMG 打包流程..."
    log_info "=========================================="
    
    check_app
    cleanup
    create_dmg
    verify_dmg
    show_result
    
    log_success "所有操作完成！"
}

# 运行主函数
main "$@"
