#!/bin/bash

# FLAC 转 MP3 脚本
# 使用方法: ./flac_to_mp3.sh [输入文件或目录] [输出目录(可选)]

# 检查 ffmpeg 是否安装
if ! command -v ffmpeg &> /dev/null; then
    echo "错误: 未找到 ffmpeg，请先安装"
    echo "安装方法:"
    echo "  Ubuntu/Debian: sudo apt-get install ffmpeg"
    echo "  CentOS/RHEL:   sudo yum install ffmpeg"
    echo "  macOS:         brew install ffmpeg"
    exit 1
fi

# 显示用法
show_usage() {
    echo "用法:"
    echo "  $0 <输入文件.flac> [输出目录]     # 转换单个文件"
    echo "  $0 <输入目录> [输出目录]          # 批量转换目录中的所有 FLAC 文件"
    echo ""
    echo "示例:"
    echo "  $0 song.flac                      # 转换为 song.mp3"
    echo "  $0 song.flac ./output             # 转换为 ./output/song.mp3"
    echo "  $0 ./music ./mp3                  # 批量转换 ./music 中的所有 FLAC 文件到 ./mp3"
}

# 检查参数
if [ $# -eq 0 ]; then
    show_usage
    exit 1
fi

INPUT="$1"
OUTPUT_DIR="${2:-.}"

# 创建输出目录
mkdir -p "$OUTPUT_DIR"

# 转换单个文件
convert_file() {
    local input_file="$1"
    local output_dir="$2"
    local filename=$(basename "$input_file" .flac)
    local output_file="${output_dir}/${filename}.mp3"
    
    echo "正在转换: $input_file -> $output_file"
    
    # ffmpeg 参数说明:
    # -i: 输入文件
    # -codec:a libmp3lame: 使用 MP3 编码器
    # -q:a 2: 音质设置 (0-9, 0最好, 9最差, 2是高质量)
    # -map_metadata 0: 保留元数据
    ffmpeg -i "$input_file" \
           -codec:a libmp3lame \
           -q:a 2 \
           -map_metadata 0 \
           -id3v2_version 3 \
           "$output_file" \
           -y \
           -hide_banner \
           -loglevel error
    
    if [ $? -eq 0 ]; then
        echo "✓ 转换成功: $output_file"
    else
        echo "✗ 转换失败: $input_file"
    fi
}

# 主逻辑
if [ -f "$INPUT" ]; then
    # 单个文件
    if [[ "$INPUT" == *.flac ]] || [[ "$INPUT" == *.FLAC ]]; then
        convert_file "$INPUT" "$OUTPUT_DIR"
    else
        echo "错误: 输入文件必须是 FLAC 格式"
        exit 1
    fi
elif [ -d "$INPUT" ]; then
    # 批量转换目录
    echo "开始批量转换目录: $INPUT"
    echo "输出目录: $OUTPUT_DIR"
    echo ""
    
    count=0
    for file in "$INPUT"/*.flac "$INPUT"/*.FLAC; do
        if [ -f "$file" ]; then
            convert_file "$file" "$OUTPUT_DIR"
            ((count++))
            echo ""
        fi
    done
    
    echo "转换完成! 共转换 $count 个文件"
else
    echo "错误: 输入路径不存在: $INPUT"
    exit 1
fi
