#!/bin/bash

# Tetris Game 自动化构建脚本
# 支持 Windows、macOS 和 Linux 平台

set -e  # 遇到错误立即退出

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

# 配置
VERSION="1.0"
BUILD_TIME=$(date '+%Y-%m-%d %H:%M:%S')
GIT_COMMIT=$(git rev-parse --short HEAD 2>/dev/null || echo "unknown")

# 函数：打印带颜色的消息
print_info() {
    echo -e "${BLUE}ℹ️  $1${RESET}"
}

print_success() {
    echo -e "${GREEN}✅ $1${RESET}"
}

print_warning() {
    echo -e "${YELLOW}⚠️  $1${RESET}"
}

print_error() {
    echo -e "${RED}❌ $1${RESET}"
}

# 函数：显示帮助信息
show_help() {
    echo -e "${BLUE}🎮 Tetris Game 自动化构建脚本${RESET}"
    echo ""
    echo "用法: $0 [选项] [平台]"
    echo ""
    echo "平台:"
    echo "  windows    构建 Windows 版本"
    echo "  macos      构建 macOS 版本"
    echo "  linux      构建 Linux 版本"
    echo "  all        构建所有平台 (默认)"
    echo ""
    echo "选项:"
    echo "  -h, --help     显示帮助信息"
    echo "  -c, --clean    构建前清理"
    echo "  -v, --verify   构建后验证"
    echo "  -i, --info     显示构建信息"
    echo "  --no-color     禁用颜色输出"
    echo ""
    echo "示例:"
    echo "  $0                    # 构建所有平台"
    echo "  $0 windows           # 仅构建 Windows"
    echo "  $0 -c all            # 清理后构建所有平台"
    echo "  $0 -cv macos         # 清理、构建 macOS 并验证"
}

# 函数：显示构建信息
show_info() {
    print_info "构建信息"
    echo "  版本: v${VERSION}"
    echo "  构建时间: ${BUILD_TIME}"
    echo "  Git 提交: ${GIT_COMMIT}"
    echo "  Go 版本: $(go version 2>/dev/null || echo '未安装')"
    echo "  当前平台: $(go env GOOS 2>/dev/null || echo 'unknown')/$(go env GOARCH 2>/dev/null || echo 'unknown')"
    echo "  工作目录: $(pwd)"
}

# 函数：检查环境
check_environment() {
    print_info "检查构建环境..."
    
    # 检查 Go
    if ! command -v go &> /dev/null; then
        print_error "Go 未安装或不在 PATH 中"
        exit 1
    fi
    print_success "Go 环境正常"
    
    # 检查必要文件
    if [ ! -f "main.go" ]; then
        print_error "main.go 文件不存在"
        exit 1
    fi
    
    if [ ! -d "assets" ]; then
        print_error "assets 目录不存在"
        exit 1
    fi
    
    print_success "源代码文件检查通过"
}

# 函数：清理构建文件
clean_build() {
    print_info "清理构建文件..."
    make clean
    print_success "清理完成"
}

# 函数：构建指定平台
build_platform() {
    local platform=$1
    print_info "构建 ${platform} 版本..."
    
    case $platform in
        windows)
            make windows
            ;;
        macos)
            make macos
            ;;
        linux)
            make linux
            ;;
        all)
            make all
            ;;
        *)
            print_error "不支持的平台: $platform"
            exit 1
            ;;
    esac
    
    print_success "${platform} 构建完成"
}

# 函数：验证构建结果
verify_build() {
    print_info "验证构建结果..."
    make verify
    print_success "验证完成"
}

# 函数：显示构建结果摘要
show_summary() {
    echo ""
    print_success "🎉 构建完成！"
    echo ""
    print_info "构建结果摘要:"
    
    if [ -d "dist" ]; then
        echo "  分发目录: dist/"
        
        # 显示文件大小
        if [ -f "dist/TetrisGame-Windows-v1.0.zip" ]; then
            local size=$(ls -lh dist/TetrisGame-Windows-v1.0.zip | awk '{print $5}')
            echo "  Windows 版本: TetrisGame-Windows-v1.0.zip (${size})"
        fi
        
        if [ -f "dist/TetrisGame-macOS-v1.0.dmg" ]; then
            local size=$(ls -lh dist/TetrisGame-macOS-v1.0.dmg | awk '{print $5}')
            echo "  macOS 版本: TetrisGame-macOS-v1.0.dmg (${size})"
        fi
        
        if [ -f "dist/TetrisGame-Linux-v1.0.tar.gz" ]; then
            local size=$(ls -lh dist/TetrisGame-Linux-v1.0.tar.gz | awk '{print $5}')
            echo "  Linux 版本: TetrisGame-Linux-v1.0.tar.gz (${size})"
        fi
        
        echo ""
        print_info "总计文件数: $(find dist/ -type f -name '*.zip' -o -name '*.dmg' -o -name '*.tar.gz' | wc -l | tr -d ' ')"
        
        # 计算总大小
        local total_size=$(find dist/ -type f -name '*.zip' -o -name '*.dmg' -o -name '*.tar.gz' -exec ls -l {} \; | awk '{sum += $5} END {print sum}')
        if [ -n "$total_size" ] && [ "$total_size" -gt 0 ]; then
            local total_mb=$((total_size / 1024 / 1024))
            echo "  总大小: ${total_mb}MB"
        fi
    else
        print_warning "dist 目录不存在"
    fi
    
    echo ""
    print_info "使用说明:"
    echo "  - 查看详细文档: cat BUILD.md"
    echo "  - 验证构建: make verify"
    echo "  - 运行游戏: make run"
}

# 主函数
main() {
    local platform="all"
    local clean_first=false
    local verify_after=false
    local show_info_only=false
    
    # 解析命令行参数
    while [[ $# -gt 0 ]]; do
        case $1 in
            -h|--help)
                show_help
                exit 0
                ;;
            -c|--clean)
                clean_first=true
                shift
                ;;
            -v|--verify)
                verify_after=true
                shift
                ;;
            -i|--info)
                show_info_only=true
                shift
                ;;
            --no-color)
                # 禁用颜色
                BLUE=''
                GREEN=''
                YELLOW=''
                RED=''
                RESET=''
                shift
                ;;
            windows|macos|linux|all)
                platform=$1
                shift
                ;;
            *)
                print_error "未知参数: $1"
                echo "使用 $0 --help 查看帮助"
                exit 1
                ;;
        esac
    done
    
    # 显示标题
    echo -e "${BLUE}🎮 Tetris Game 自动化构建脚本 v${VERSION}${RESET}"
    echo ""
    
    # 如果只是显示信息
    if [ "$show_info_only" = true ]; then
        show_info
        exit 0
    fi
    
    # 检查环境
    check_environment
    
    # 清理（如果需要）
    if [ "$clean_first" = true ]; then
        clean_build
    fi
    
    # 构建
    build_platform "$platform"
    
    # 验证（如果需要）
    if [ "$verify_after" = true ]; then
        verify_build
    fi
    
    # 显示摘要
    show_summary
}

# 错误处理
trap 'print_error "构建过程中发生错误，退出码: $?"' ERR

# 运行主函数
main "$@" 