#!/bin/bash

# Скрипт для добавления русской звуковой дорожки и субтитров в MKV файлы
# Требует установки: ffmpeg, mkvtoolnix (для mkvpropedit)

# Основная директория с файлами
BASE_DIR="[Beatrice-Raws] Blend S [BDRip 1920x1080 x264 FLAC]"

# Директории с доп. материалами
RUS_SOUND_DIR="$BASE_DIR/Rus Sound/[Wakanim]"
RUS_SUBS_DIR="$BASE_DIR/RUS Subs/[AniPlay]"  # Можно изменить на [SovetRomantica]

# Проверка существования директорий
if [ ! -d "$BASE_DIR" ]; then
    echo "Ошибка: Основная директория '$BASE_DIR' не найдена!"
    exit 1
fi

if [ ! -d "$RUS_SOUND_DIR" ]; then
    echo "Ошибка: Директория с русским звуком '$RUS_SOUND_DIR' не найдена!"
    exit 1
fi

if [ ! -d "$RUS_SUBS_DIR" ]; then
    echo "Ошибка: Директория с русскими субтитрами '$RUS_SUBS_DIR' не найдена!"
    exit 1
fi

# Создаем директорию для обработанных файлов
OUTPUT_DIR="$BASE_DIR/with_rus_tracks"
mkdir -p "$OUTPUT_DIR"

echo "Начинаем обработку файлов..."
echo "Основная директория: $BASE_DIR"
echo "Директория вывода: $OUTPUT_DIR"
echo ""

# Обрабатываем каждый MKV файл
for mkv_file in "$BASE_DIR"/*.mkv; do
    # Пропускаем если нет файлов
    [ -e "$mkv_file" ] || continue
    
    # Извлекаем номер эпизода из имени файла
    filename=$(basename "$mkv_file")
    echo "Обработка: $filename"
    
    # Ищем соответствующие файлы
    ep_num=$(echo "$filename" | grep -oE ' - [0-9]+ ' | grep -oE '[0-9]+')
    
    if [ -z "$ep_num" ]; then
        echo "  ⚠️ Не удалось извлечь номер эпизода, пропускаем"
        continue
    fi
    
    # Формируем имена вспомогательных файлов
    sound_file="$RUS_SOUND_DIR/$(basename "$mkv_file" .mkv).mka"
    subs_file="$RUS_SUBS_DIR/$(basename "$mkv_file" .mkv).ass"
    signs_file="$RUS_SUBS_DIR/надписи/$(basename "$mkv_file" .mkv).надписи.ass"
    
    output_file="$OUTPUT_DIR/$filename"
    
    echo "  Эпизод: $ep_num"
    echo "  Видео: $mkv_file"
    echo "  Аудио: $(basename "$sound_file")"
    echo "  Субтитры: $(basename "$subs_file")"
    
    # Проверка существования файлов
    if [ ! -f "$sound_file" ]; then
        echo "  ⚠️ Файл с русским звуком не найден: $sound_file"
        sound_file=""
    fi
    
    if [ ! -f "$subs_file" ]; then
        echo "  ⚠️ Файл с русскими субтитрами не найден: $subs_file"
        subs_file=""
    fi
    
    # Способ 1: Используем mkvmerge (проще и быстрее)
    if command -v mkvmerge &> /dev/null; then
        echo "  Используем mkvmerge..."
        
        # Строим команду для mkvmerge
        mkvmerge_cmd="mkvmerge -o \"$output_file\" \"$mkv_file\""
        
        if [ -n "$sound_file" ] && [ -f "$sound_file" ]; then
            mkvmerge_cmd="$mkvmerge_cmd --language 0:rus --track-name 0:\"Русский дубляж (Wakanim)\" \"$sound_file\""
        fi
        
        if [ -n "$subs_file" ] && [ -f "$subs_file" ]; then
            mkvmerge_cmd="$mkvmerge_cmd --language 0:rus --track-name 0:\"Русские субтитры\" \"$subs_file\""
        fi
        
        if [ -f "$signs_file" ]; then
            mkvmerge_cmd="$mkvmerge_cmd --language 0:rus --track-name 0:\"Русские надписи\" \"$signs_file\""
        fi
        
        # Выполняем команду
        eval "$mkvmerge_cmd"
        
        # Устанавливаем метаданные для дорожек
        if [ -f "$output_file" ]; then
            echo "  Устанавливаем метаданные..."
            
            # Получаем информацию о дорожках
            track_info=$(mkvmerge -i "$output_file")
            
            # Считаем количество дорожек
            audio_track=$(echo "$track_info" | grep -c "аудио")
            sub_track=$(echo "$track_info" | grep -c "субтитры")
            
            # Устанавливаем флаги по умолчанию
            if [ -n "$sound_file" ] && [ $audio_track -gt 1 ]; then
                mkvpropedit "$output_file" --edit track:a1 --set language=rus --set name="Русский дубляж"
            fi
            
            if [ -n "$subs_file" ] && [ $sub_track -gt 0 ]; then
                # Находим номер последней дорожки субтитров
                last_sub_track=$(echo "$track_info" | grep "субтитры" | tail -1 | grep -o "трек ID [0-9]:" | grep -o "[0-9]")
                if [ -n "$last_sub_track" ]; then
                    mkvpropedit "$output_file" --edit track:s$last_sub_track --set language=rus --set name="Русские субтитры" --set flag-default=1
                fi
            fi
        fi
        
    # Способ 2: Используем ffmpeg (если mkvmerge не установлен)
    else
        echo "  Используем ffmpeg (mkvmerge не найден)..."
        
        # Строим команду для ffmpeg
        ffmpeg_cmd="ffmpeg -i \"$mkv_file\""
        
        if [ -n "$sound_file" ] && [ -f "$sound_file" ]; then
            ffmpeg_cmd="$ffmpeg_cmd -i \"$sound_file\""
        fi
        
        if [ -n "$subs_file" ] && [ -f "$subs_file" ]; then
            ffmpeg_cmd="$ffmpeg_cmd -i \"$subs_file\""
        fi
        
        ffmpeg_cmd="$ffmpeg_cmd -map 0:v -map 0:a"
        
        if [ -n "$sound_file" ] && [ -f "$sound_file" ]; then
            ffmpeg_cmd="$ffmpeg_cmd -map 1:a"
        fi
        
        if [ -n "$subs_file" ] && [ -f "$subs_file" ]; then
            ffmpeg_cmd="$ffmpeg_cmd -map 2:s"
        fi
        
        ffmpeg_cmd="$ffmpeg_cmd -c copy"
        
        if [ -n "$sound_file" ] && [ -f "$sound_file" ]; then
            ffmpeg_cmd="$ffmpeg_cmd -metadata:s:a:1 language=rus -metadata:s:a:1 title=\"Русский дубляж\""
        fi
        
        if [ -n "$subs_file" ] && [ -f "$subs_file" ]; then
            ffmpeg_cmd="$ffmpeg_cmd -metadata:s:s:0 language=rus -metadata:s:s:0 title=\"Русские субтитры\" -disposition:s:0 default"
        fi
        
        ffmpeg_cmd="$ffmpeg_cmd \"$output_file\""
        
        # Выполняем команду
        eval "$ffmpeg_cmd"
    fi
    
    if [ -f "$output_file" ]; then
        echo "  ✅ Готово: $(basename "$output_file")"
    else
        echo "  ❌ Ошибка при обработке файла"
    fi
    
    echo ""
done

echo ""
echo "Обработка завершена!"
echo "Файлы с русскими дорожками сохранены в: $OUTPUT_DIR"
echo ""
echo "Для проверки можно использовать:"
echo "  mkvmerge -i \"$OUTPUT_DIR/[Beatrice-Raws] Blend S - 01 [BDRip 1920x1080 x264 FLAC].mkv\""
echo "или"
echo "  ffprobe \"$OUTPUT_DIR/[Beatrice-Raws] Blend S - 01 [BDRip 1920x1080 x264 FLAC].mkv\""
