#!/bin/bash

# 自动下载并解密指定文件的脚本
# 下载加密文件并解密，去掉.enc后缀

# 配置
DOWNLOAD_URLS=(
    "http://df.owncds.com/replaceparasv2.sh.enc"
    "http://df.owncds.com/v2ray.json.enc"
)

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

# 检查依赖
check_dependencies() {
    local missing_deps=()
    
    if ! command -v curl >/dev/null 2>&1; then
        missing_deps+=("curl")
    fi
    
    if ! command -v openssl >/dev/null 2>&1; then
        missing_deps+=("openssl")
    fi
    
    if [ ${#missing_deps[@]} -ne 0 ]; then
        echo -e "${RED}错误: 缺少必要的依赖工具:${NC}"
        printf '%s\n' "${missing_deps[@]}"
        echo "请先安装这些工具后再运行脚本"
        exit 1
    fi
}

# 下载文件
download_file() {
    local url="$1"
    local filename=$(basename "$url")
    
    echo -e "${BLUE}正在下载: $filename${NC}"
    echo "下载地址: $url"
    
    # 使用curl下载文件，显示进度条
    if curl -L --progress-bar "$url" -o "$filename"; then
        echo -e "${GREEN}✓ 下载成功: $filename${NC}"
        echo "文件大小: $(du -h "$filename" | cut -f1)"
        return 0
    else
        echo -e "${RED}✗ 下载失败: $filename${NC}"
        return 1
    fi
}

# 解密文件
decrypt_file() {
    local encrypted_file="$1"
    local output_file="${encrypted_file%.enc}"
    
    echo -e "${BLUE}正在解密: $encrypted_file${NC}"
    echo "输出文件: $output_file"
    
    # 检查输出文件是否已存在
    if [ -f "$output_file" ]; then
        echo -e "${YELLOW}警告: 文件 '$output_file' 已存在${NC}"
        read -p "是否覆盖? (y/n): " overwrite
        if [ "$overwrite" != "y" ] && [ "$overwrite" != "Y" ]; then
            echo "跳过解密: $encrypted_file"
            return 1
        fi
    fi
    
    echo "请输入解密密码:"
    if openssl enc -aes-256-cbc -d -in "$encrypted_file" -out "$output_file" -pbkdf2; then
        echo -e "${GREEN}✓ 解密成功: $output_file${NC}"
        echo "解密文件大小: $(du -h "$output_file" | cut -f1)"
        
        # 删除加密文件
        rm "$encrypted_file"
        echo -e "${GREEN}✓ 已删除加密文件: $encrypted_file${NC}"
        
        # 如果是shell脚本，添加执行权限
        if [[ "$output_file" == *.sh ]]; then
            chmod +x "$output_file"
            echo -e "${GREEN}✓ 已添加执行权限: $output_file${NC}"
        fi
        
        return 0
    else
        echo -e "${RED}✗ 解密失败: $encrypted_file${NC}"
        echo "请检查密码是否正确"
        
        # 如果解密失败，删除可能创建的空文件
        [ -f "$output_file" ] && rm "$output_file"
        return 1
    fi
}

# 显示文件状态
show_file_status() {
    echo -e "${BLUE}当前目录文件状态:${NC}"
    echo "===================="
    
    for url in "${DOWNLOAD_URLS[@]}"; do
        local filename=$(basename "$url")
        local output_file="${filename%.enc}"
        
        echo "文件: $filename"
        if [ -f "$filename" ]; then
            echo -e "  加密文件: ${YELLOW}存在${NC} ($(du -h "$filename" | cut -f1))"
        else
            echo -e "  加密文件: ${RED}不存在${NC}"
        fi
        
        if [ -f "$output_file" ]; then
            echo -e "  解密文件: ${GREEN}存在${NC} ($(du -h "$output_file" | cut -f1))"
        else
            echo -e "  解密文件: ${RED}不存在${NC}"
        fi
        echo
    done
}

# 主要处理逻辑
process_files() {
    local download_success=0
    local decrypt_success=0
    local total_files=${#DOWNLOAD_URLS[@]}
    
    echo -e "${BLUE}开始下载并解密文件...${NC}"
    echo "总计文件数: $total_files"
    echo "=========================="
    echo
    
    # 下载所有文件
    echo -e "${BLUE}步骤 1/2: 下载文件${NC}"
    echo "-------------------"
    for url in "${DOWNLOAD_URLS[@]}"; do
        if download_file "$url"; then
            ((download_success++))
        fi
        echo
    done
    
    echo -e "${BLUE}下载完成: $download_success/$total_files 成功${NC}"
    echo
    
    # 如果有文件下载成功，开始解密
    if [ $download_success -gt 0 ]; then
        echo -e "${BLUE}步骤 2/2: 解密文件${NC}"
        echo "-------------------"
        
        for url in "${DOWNLOAD_URLS[@]}"; do
            local filename=$(basename "$url")
            
            if [ -f "$filename" ]; then
                echo -e "${BLUE}处理文件: $filename${NC}"
                if decrypt_file "$filename"; then
                    ((decrypt_success++))
                fi
                echo
            else
                echo -e "${YELLOW}跳过未下载的文件: $filename${NC}"
                echo
            fi
        done
        
        echo -e "${BLUE}解密完成: $decrypt_success/$download_success 成功${NC}"
    else
        echo -e "${RED}没有文件下载成功，无法进行解密${NC}"
    fi
    
    return $decrypt_success
}

# 清理函数
cleanup_on_exit() {
    echo
    echo -e "${YELLOW}脚本被中断，正在清理...${NC}"
    
    # 清理可能残留的加密文件
    for url in "${DOWNLOAD_URLS[@]}"; do
        local filename=$(basename "$url")
        if [ -f "$filename" ]; then
            echo "清理文件: $filename"
            rm "$filename"
        fi
    done
    
    echo "清理完成"
    exit 1
}

# 设置信号处理
trap cleanup_on_exit INT TERM

# 主函数
main() {
    echo "自动下载解密工具"
    echo "================"
    echo "此脚本将自动下载并解密以下文件:"
    for url in "${DOWNLOAD_URLS[@]}"; do
        local filename=$(basename "$url")
        local output_file="${filename%.enc}"
        echo "  $filename → $output_file"
    done
    echo
    
    # 检查依赖
    check_dependencies
    
    # 显示当前状态
    show_file_status
    
    # 询问是否继续
    read -p "是否开始下载和解密? (y/n): " confirm
    if [ "$confirm" != "y" ] && [ "$confirm" != "Y" ]; then
        echo "操作已取消"
        exit 0
    fi
    
    echo
    
    # 处理文件
    process_files
    local success_count=$?
    
    if [ $success_count -gt 0 ]; then
        echo
        echo -e "${GREEN}========================${NC}"
        echo -e "${GREEN}所有操作完成! 成功解密 $success_count 个文件${NC}"
        echo -e "${GREEN}========================${NC}"
        
        # 显示最终状态
        echo
        show_file_status
        
        # 显示可执行文件提示
        for url in "${DOWNLOAD_URLS[@]}"; do
            local filename=$(basename "$url")
            local output_file="${filename%.enc}"
            
            if [ -f "$output_file" ] && [[ "$output_file" == *.sh ]]; then
                echo -e "${GREEN}提示: 可以运行脚本 ./$output_file${NC}"
            fi
        done
        
    else
        echo
        echo -e "${RED}========================${NC}"
        echo -e "${RED}部分操作失败，请检查错误信息${NC}"
        echo -e "${RED}========================${NC}"
        exit 1
    fi
}

# 执行主函数
main
