#!/bin/bash

# OpenStax PDF下载脚本
# 工作目录
WORKDIR="/var/www/downloads/openstax"
cd "$WORKDIR" || exit 1

# 下载列表：文件名 -> URL
declare -A DOWNLOADS=(
    ["Algebra I.pdf"]="https://openstax.org/details/books/algebra-and-trigonometry-2e/download-pdf"
    ["Algebra II.pdf"]="https://openstax.org/details/books/college-algebra-2e/download-pdf"
    ["Biology 2e.pdf"]="https://openstax.org/details/books/biology-2e/download-pdf"
    ["Chemistry 2e.pdf"]="https://openstax.org/details/books/chemistry-2e/download-pdf"
    ["University Physics Volume 1.pdf"]="https://openstax.org/details/books/university-physics-volume-1/download-pdf"
    ["U.S. History.pdf"]="https://openstax.org/details/books/us-history/download-pdf"
    ["Principles of Economics 3e.pdf"]="https://openstax.org/details/books/principles-economics-3e/download-pdf"
)

# 结果记录文件
RESULT_FILE="$WORKDIR/下载结果.txt"
> "$RESULT_FILE"  # 清空文件

echo "=== OpenStax PDF 下载开始 ===" | tee -a "$RESULT_FILE"
echo "开始时间: $(date '+%Y-%m-%d %H:%M:%S')" | tee -a "$RESULT_FILE"
echo "" | tee -a "$RESULT_FILE"

# 下载函数
download_file() {
    local filename="$1"
    local url="$2"
    local temp_file="${filename}.download"
    local success=false
    local attempt=1
    local max_attempts=2

    echo "正在下载: $filename" | tee -a "$RESULT_FILE"
    echo "URL: $url" | tee -a "$RESULT_FILE"

    while [ $attempt -le $max_attempts ] && [ "$success" = false ]; do
        echo "  尝试 $attempt/$max_attempts ..." | tee -a "$RESULT_FILE"

        # 使用wget下载，设置超时60秒，失败继续尝试
        wget --timeout=60 --tries=1 -O "$temp_file" "$url" 2>&1 | tee -a "$RESULT_FILE"

        if [ $? -eq 0 ] && [ -f "$temp_file" ] && [ -s "$temp_file" ]; then
            # 下载成功，重命名文件
            mv "$temp_file" "$filename"
            local size=$(du -h "$filename" | cut -f1)
            echo "  ✓ 下载成功 (大小: $size)" | tee -a "$RESULT_FILE"
            success=true
        else
            echo "  ✗ 下载失败" | tee -a "$RESULT_FILE"
            rm -f "$temp_file" 2>/dev/null
            attempt=$((attempt + 1))
            if [ $attempt -le $max_attempts ]; then
                echo "  等待2秒后重试..." | tee -a "$RESULT_FILE"
                sleep 2
            fi
        fi
    done

    if [ "$success" = false ]; then
        echo "  ✗ 所有尝试均失败" | tee -a "$RESULT_FILE"
        echo "  URL: $url" | tee -a "$RESULT_FILE"
        echo "  状态: 失败" | tee -a "$RESULT_FILE"
    fi

    echo "" | tee -a "$RESULT_FILE"
}

# 按顺序下载所有文件
for filename in "${!DOWNLOADS[@]}"; do
    url="${DOWNLOADS[$filename]}"
    download_file "$filename" "$url"
done

echo "=== 下载完成 ===" | tee -a "$RESULT_FILE"
echo "结束时间: $(date '+%Y-%m-%d %H:%M:%S')" | tee -a "$RESULT_FILE"
echo "" | tee -a "$RESULT_FILE"

# 计算总大小并列出文件清单
echo "=== 文件清单 ===" | tee -a "$RESULT_FILE"
total_size=0
file_count=0

for file in *.pdf; do
    if [ -f "$file" ]; then
        size_bytes=$(stat -c%s "$file" 2>/dev/null || stat -f%z "$file" 2>/dev/null)
        size_human=$(du -h "$file" | cut -f1)
        echo "$file ($size_human)" | tee -a "$RESULT_FILE"
        total_size=$((total_size + size_bytes))
        file_count=$((file_count + 1))
    fi
done

echo "" | tee -a "$RESULT_FILE"
echo "总计文件数: $file_count" | tee -a "$RESULT_FILE"

# 转换总大小为易读格式
if [ $total_size -ge 1073741824 ]; then
    total_size_human=$(echo "scale=2; $total_size/1073741824" | bc)
    total_size_str="${total_size_human} GB"
elif [ $total_size -ge 1048576 ]; then
    total_size_human=$(echo "scale=2; $total_size/1048576" | bc)
    total_size_str="${total_size_human} MB"
elif [ $total_size -ge 1024 ]; then
    total_size_human=$(echo "scale=2; $total_size/1024" | bc)
    total_size_str="${total_size_human} KB"
else
    total_size_str="${total_size} bytes"
fi

echo "总大小: $total_size_str" | tee -a "$RESULT_FILE"
echo "" | tee -a "$RESULT_FILE"

# 检查失败的文件
failed_files=0
for filename in "${!DOWNLOADS[@]}"; do
    if [ ! -f "$filename" ]; then
        failed_files=$((failed_files + 1))
    fi
done

echo "=== 统计摘要 ===" | tee -a "$RESULT_FILE"
echo "成功下载: $((file_count)) 个文件" | tee -a "$RESULT_FILE"
echo "下载失败: $failed_files 个文件" | tee -a "$RESULT_FILE"
echo "成功率: $(awk "BEGIN {printf \"%.1f%%\", ($file_count/($file_count+$failed_files))*100}")" | tee -a "$RESULT_FILE"

echo "" | tee -a "$RESULT_FILE"
echo "下载结果已保存至: $RESULT_FILE" | tee -a "$RESULT_FILE"