#!/bin/bash

# 批量执行脚本工具
# 用法: ./run_batch.sh <父目录> <脚本1.py> [脚本2.py] [脚本3.py] ...
# 示例: ./run_batch.sh input sug_v2.py sug_v3.py

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

# 检查参数数量
if [ $# -lt 2 ]; then
    echo "用法: $0 <父目录> <脚本1.py> [脚本2.py] ..."
    echo "示例: $0 input sug_v2.py sug_v3.py"
    exit 1
fi

# 获取父目录
PARENT_DIR="$1"
shift  # 移除第一个参数，剩下的都是py脚本

# 获取所有py脚本
PY_SCRIPTS=("$@")

# 检查父目录是否存在
if [ ! -d "$PARENT_DIR" ]; then
    echo "错误: 父目录 '$PARENT_DIR' 不存在"
    exit 1
fi

# 检查所有py脚本是否存在
for script in "${PY_SCRIPTS[@]}"; do
    if [ ! -f "$script" ]; then
        echo "错误: 脚本 '$script' 不存在"
        exit 1
    fi
done

# 获取父目录下的所有子目录
echo "========================================="
echo "开始批量执行"
echo "父目录: $PARENT_DIR"
echo "脚本列表: ${PY_SCRIPTS[*]}"
echo "========================================="
echo ""

# 统计信息
total_tasks=0
success_tasks=0
failed_tasks=0

# 遍历父目录下的所有子目录
for subdir in "$PARENT_DIR"/*/; do
    # 移除末尾的斜杠
    subdir="${subdir%/}"

    # 检查是否是目录
    if [ ! -d "$subdir" ]; then
        continue
    fi

    # 获取子目录名称
    subdir_name=$(basename "$subdir")

    echo "----------------------------------------"
    echo "处理子目录: $subdir"
    echo "----------------------------------------"

    # 对每个py脚本执行
    for script in "${PY_SCRIPTS[@]}"; do
        total_tasks=$((total_tasks + 1))

        echo ""
        echo "[任务 $total_tasks] 执行: python $script --input-dir $subdir"
        echo "开始时间: $(date '+%Y-%m-%d %H:%M:%S')"

        # 执行脚本，捕获错误
        if python "$script" --input-dir "$subdir"; then
            success_tasks=$((success_tasks + 1))
            echo "✓ 成功"
        else
            failed_tasks=$((failed_tasks + 1))
            echo "✗ 失败"
            # 继续执行其他任务，不退出
        fi

        echo "结束时间: $(date '+%Y-%m-%d %H:%M:%S')"
        echo ""
    done
done

# 输出统计信息
echo "========================================="
echo "批量执行完成"
echo "========================================="
echo "总任务数: $total_tasks"
echo "成功: $success_tasks"
echo "失败: $failed_tasks"
echo "========================================="

# 如果有失败的任务，返回非零退出码
if [ $failed_tasks -gt 0 ]; then
    exit 1
fi
