import re
from translate import Translator

translator = Translator(to_lang="ru")

print("Чтение файла...")
file_path = r'C:\Users\Ars\Desktop\project on python\someshit\backpack.snbt'
with open(file_path, 'r', encoding='utf-8') as file:
    content = file.read()

def translate_text(text):
    if not text:
        return text
    try:
        print(f"Перевод текста: {text[:30]}...")  # Показать начало текста
        translated_text = translator.translate(text)
        print(f"Переведено: {translated_text[:30]}...")   # Показать начало переведённого текста
    except Exception as e:
        print(f"Ошибка при переводе текста: {text}\n{e}")
        translated_text = text
    return translated_text

def translate_with_special_handling(text):
    def translate_part(match):
        # Это обработчик для частей текста между символами &
        inner_text = match.group(1)
        translated = translate_text(inner_text)
        return f"&{translated}&"

    # Заменяем коды цветов на специальные метки
    def replace_color_codes(match):
        return f"__COLOR_{match.group(0)}__"

    text_with_colors_ignored = re.sub(r'§[0-9a-f]', replace_color_codes, text)

    # Сначала переводим части между символами &
    text_with_translated_parts = re.sub(r'&(.*?)&', translate_part, text_with_colors_ignored)

    # Затем переводим остальной текст
    translated_text = translate_text(text_with_translated_parts)

    # Возвращаем коды цветов на место
    final_text = re.sub(r'__COLOR_([0-9a-f])__', r'§\1', translated_text)

    return final_text

def translate_fields(content):
    def translate_match(match):
        key = match.group(1)
        text = match.group(2) or match.group(3)
        if key in ['description', 'subtitle']:
            if key == 'description' and text.startswith('[') and text.endswith(']'):
                text = text.strip('[]').strip('"')
            translated_text = translate_with_special_handling(text)
            if key == 'description':
                translated_text = f'["{translated_text}"]'
            else:
                translated_text = f'"{translated_text}"'
            return f'{key}: {translated_text}'
        return f'{key}: "{text}"'

    # Регулярное выражение для поиска строк вида key: ["text"] и key: "text"
    pattern = re.compile(r'(\w+):\s*(?:\[(?:"([^"]*?)")\]|\s*"([^"]*?)")')
    return pattern.sub(translate_match, content)

print("Начало перевода...")
translated_content = translate_fields(content)

print("Запись переведенного текста в файл...")
output_file_path = r'C:\Users\Ars\Desktop\project on python\someshit\backpack_translated.snbt'
with open(output_file_path, 'w', encoding='utf-8') as file:
    file.write(translated_content)

print(f"Перевод завершен, файл сохранен как '{output_file_path}'")
