#!/bin/bash

# FlyClash 版本管理下载脚本
# 用法: ./download_flyclash.sh [版本号]

set -e

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

# 基础URL
BASE_URL="https://github.com/GtxFury/FlyClash/releases/download"

# 打印带颜色的信息
print_info() {
    echo -e "${GREEN}[INFO]${NC} $1"
}

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

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

# 获取版本号
get_version() {
    if [ -n "$1" ]; then
        VERSION="$1"
    else
        read -p "请输入版本号 (例如: 0.2.9): " VERSION
    fi
    
    # 验证版本号格式 (只支持 0.2.9 格式，不带v)
    if [[ ! "$VERSION" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
        print_error "无效的版本号格式！请使用类似 0.2.9 的格式（不要带v）"
        exit 1
    fi
    
    # 带v的版本号（用于目录名和URL）
    VERSION_WITH_V="v${VERSION}"
    print_info "版本号: $VERSION"
    print_info "目录名: $VERSION_WITH_V"
}

# 创建下载目录
create_download_dir() {
    DOWNLOAD_DIR="$VERSION_WITH_V"
    
    if [ -d "$DOWNLOAD_DIR" ]; then
        print_warn "目录 $DOWNLOAD_DIR 已存在"
        read -p "是否覆盖? (y/n): " -n 1 -r
        echo
        if [[ $REPLY =~ ^[Yy]$ ]]; then
            rm -rf "$DOWNLOAD_DIR"
        else
            print_error "用户取消操作"
            exit 1
        fi
    fi
    
    mkdir -p "$DOWNLOAD_DIR"
    print_info "创建目录: $DOWNLOAD_DIR"
}

# 下载文件
download_files() {
    cd "$DOWNLOAD_DIR"
    
    # 定义要下载的文件列表
    declare -A FILES=(
        ["FlyClash-${VERSION}-arm64.dmg"]="${BASE_URL}/${VERSION_WITH_V}/FlyClash-${VERSION}-arm64.dmg"
        ["FlyClash-${VERSION}-x64.dmg"]="${BASE_URL}/${VERSION_WITH_V}/FlyClash-${VERSION}-x64.dmg"
        ["FlyClash-${VERSION}-x64-setup.exe"]="${BASE_URL}/${VERSION_WITH_V}/FlyClash-${VERSION}-x64-setup.exe"
        ["FlyClash-${VERSION}-x64-setup.7z"]="${BASE_URL}/${VERSION_WITH_V}/FlyClash-${VERSION}-x64-setup.7z"
    )
    
    print_info "开始下载文件到目录: $DOWNLOAD_DIR"
    
    for filename in "${!FILES[@]}"; do
        url="${FILES[$filename]}"
        print_info "正在下载: $filename"
        
        # 使用 wget 或 curl
        if command -v wget &> /dev/null; then
            if wget -q --show-progress "$url" -O "$filename"; then
                print_info "✓ 下载完成: $filename"
            else
                print_error "✗ 下载失败: $filename"
                # 不退出，继续下载其他文件
            fi
        elif command -v curl &> /dev/null; then
            if curl -L -# -o "$filename" "$url"; then
                print_info "✓ 下载完成: $filename"
            else
                print_error "✗ 下载失败: $filename"
            fi
        else
            print_error "未找到 wget 或 curl，请安装其中一个"
            exit 1
        fi
    done
    
    cd ..
}

# 清理旧版本
cleanup_old_versions() {
    print_info "清理旧版本目录..."
    
    # 查找所有 v数字.数字.数字 格式的目录
    for dir in v*/; do
        # 检查是否为目录
        if [ -d "$dir" ]; then
            # 提取目录名（去掉末尾的/）
            dir_name="${dir%/}"
            
            # 检查是否匹配 v数字.数字.数字 格式
            if [[ "$dir_name" =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
                # 如果版本号不是当前版本，则删除
                if [ "$dir_name" != "$VERSION_WITH_V" ]; then
                    print_warn "删除旧版本目录: $dir"
                    rm -rf "$dir"
                fi
            fi
        fi
    done
}

# 显示下载结果
show_results() {
    echo
    print_info "========================================"
    print_info "下载完成！"
    print_info "版本: $VERSION"
    print_info "目录: $DOWNLOAD_DIR"
    print_info "文件列表:"
    ls -lh "$DOWNLOAD_DIR" | tail -n +2
    print_info "========================================"
}

# 主函数
main() {
    print_info "FlyClash 版本下载工具"
    print_info "================================"
    
    # 获取版本号
    get_version "$1"
    
    # 创建下载目录
    create_download_dir
    
    # 下载文件
    download_files
    
    # 清理旧版本
    cleanup_old_versions
    
    # 显示结果
    show_results
}

# 捕获中断信号
trap 'print_error "脚本被中断"; exit 1' INT TERM

# 执行主函数
main "$@"
