#!/bin/bash

# 日志文件路径
LOG_FILE="/var/log/backup_script.log"

# 定义要备份的目录列表
declare -A backup_dirs=(
    ["am"]="/data/dc/img/meituan-collect-hotel-img-bak-am /data/dc/img/xiecheng-collect-hotel-img-bak-am"
    ["pm"]="/data/dc/img/meituan-collect-hotel-img-bak-pm /data/dc/img/xiecheng-collect-hotel-img-bak-pm"
)

# 当前日期，用于匹配文件夹和命名备份文件
current_date=$(date +"%Y-%m-%d")

# 创建日志函数
log() {
    echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"
}

# 显示帮助信息
show_help() {
    echo "用法: $0 [选项]"
    echo "选项:"
    echo "  -a, --am      只执行上午(am)备份"
    echo "  -p, --pm      只执行下午(pm)备份"
    echo "  -h, --help    显示帮助信息"
    echo "如果没有指定选项，默认执行全部备份"
    exit 0
}

# 解析命令行参数
parse_args() {
    while [[ $# -gt 0 ]]; do
        case "$1" in
            -a|--am)
                run_am=true
                shift
                ;;
            -p|--pm)
                run_pm=true
                shift
                ;;
            -h|--help)
                show_help
                ;;
            *)
                echo "错误: 未知参数 $1"
                show_help
                exit 1
                ;;
        esac
    done

    # 如果没有指定任何参数，默认执行全部
    if [ -z "$run_am" ] && [ -z "$run_pm" ]; then
        run_am=true
        run_pm=true
    fi
}

# 备份单个目录
backup_directory() {
    local dir=$1
    local dir_name=$(basename "$dir")
    
    # 当天日期的文件夹路径
    today_dir="$dir/$current_date"
    
    # 检查当天日期的文件夹是否存在
    if [ ! -d "$today_dir" ]; then
        log "当天日期文件夹不存在，跳过: $today_dir"
        return
    fi
    
    log "正在处理目录: $today_dir"
    
    # 在目录下创建tar目录（如果不存在）
    bak_dir="$dir/tar"
    mkdir -p "$bak_dir"
    
    # 备份文件名（直接使用日期命名）
    backup_file="$bak_dir/${current_date}.tar.gz"
    
    # 检查备份文件是否已存在
    if [ -f "$backup_file" ]; then
        log "警告: 备份文件已存在，跳过: $backup_file"
        return
    fi
    
    # 检查磁盘空间（至少需要10GB）
    min_space=10  # 最小需要的GB数
    available=$(df -BG "$dir" | awk 'NR==2 {print $4}' | tr -d 'G')
    if [ "$available" -lt "$min_space" ]; then
        log "错误: 磁盘空间不足，需要至少 ${min_space}G，当前只有 ${available}G"
        exit 1
    fi
    
    # 压缩当天日期的文件夹到tar.gz文件
    log "正在创建备份: $backup_file"
    tar -czf "$backup_file" -C "$dir" "$current_date"
    
    # 检查tar命令是否成功
    if [ $? -eq 0 ]; then
        log "备份成功创建: $backup_file"
        
        # 记录备份文件大小
        file_size=$(du -h "$backup_file" | cut -f1)
        log "备份文件大小: $file_size"
        
        # 验证备份文件
        if [ -f "$backup_file" ] && [ -s "$backup_file" ]; then
            log "验证: 备份文件存在且非空"
        else
            log "错误: 备份文件验证失败"
            rm -f "$backup_file" 2>/dev/null
        fi
    else
        log "错误: 备份 $today_dir 时出错"
    fi
}

# 主函数
main() {
    # 初始化日志
    log "=== 开始备份任务 ==="
    
    # 解析参数
    parse_args "$@"
    
    # 执行AM备份
    if [ "$run_am" = true ]; then
        log "开始执行AM备份..."
        for dir in ${backup_dirs["am"]}; do
            backup_directory "$dir"
        done
    fi
    
    # 执行PM备份
    if [ "$run_pm" = true ]; then
        log "开始执行PM备份..."
        for dir in ${backup_dirs["pm"]}; do
            backup_directory "$dir"
        done
    fi
    
    log "=== 备份任务完成 ==="
    echo "备份完成，详细日志请查看: $LOG_FILE"
}

# 执行主函数
main "$@"
