#!/bin/bash

command -v ffmpeg >/dev/null 2>&1 || { echo "ffmpeg не установлен. Установите ffmpeg и попробуйте снова."; exit 1; }
command -v find >/dev/null 2>&1 || { echo "find не установлен. Установите find и попробуйте снова."; exit 1; }
command -v sed >/dev/null 2>&1 || { echo "sed не установлен. Установите sed и попробуйте снова."; exit 1; }

read -p "Введите исходный формат (например, wv): " SOURCE_FORMAT
read -p "Введите целевой формат (например, flac): " TARGET_FORMAT

if [ -z "$SOURCE_FORMAT" ] || [ -z "$TARGET_FORMAT" ]; then
    echo "Необходимо указать оба формата." >&2
    exit 1
fi

BASE_DIR="${1:-.}"

if [ ! -d "$BASE_DIR" ]; then
    echo "Директория не существует: $BASE_DIR" >&2
    exit 1
fi

convert_files() {
    local source_file="$1"
    local target_file="${source_file%.*}.$TARGET_FORMAT"

    if [ -f "$target_file" ]; then
        echo "Файл уже существует и будет перезаписан: \"$target_file\""
    fi

    echo "Конвертируем: \"$source_file\" -> \"$target_file\""

    if ffmpeg -y -i "$source_file" -c:a "$TARGET_FORMAT" "$target_file" >/dev/null 2>&1; then
        # rm "$source_file"
        echo "Преобразовано: \"$source_file\" -> \"$target_file\""
    else
        echo "Не удалось конвертировать: \"$source_file\"" >&2
    fi
}

update_cue_files() {
    local cue_file="$1"

    echo "Обрабатываем .cue файл: \"$cue_file\""

    sed -i '' "s/\\.$SOURCE_FORMAT/\\.$TARGET_FORMAT/g" "$cue_file"

    echo "Обновлён .cue файл: \"$cue_file\""
}

export -f convert_files
find "$BASE_DIR" -type f -iname "*.$SOURCE_FORMAT" -print0 | while IFS= read -r -d '' source_file; do
    convert_files "$source_file"
done

find "$BASE_DIR" -type f -iname "*.cue" -print0 | while IFS= read -r -d '' cue_file; do
    update_cue_files "$cue_file"
done

echo "Готово!"
