import json
import polib


def flatten_and_deduplicate(values, seen):
    """
    递归展开列表并去重
    """
    flattened = []
    for value in values:
        if isinstance(value, list):
            flattened.extend(flatten_and_deduplicate(value, seen))
        else:
            value = value.strip()
            if value and value not in seen:
                seen.add(value)
                flattened.append(value)
    return flattened


def extract_and_deduplicate(source, target):
    """
    遍历 JSON 数据,去重并生成新的 JSON 格式
    """
    with open(source, "r", encoding="utf-8") as f:
        data = json.load(f)

    new_json = {}

    for key, values in data.items():
        if not isinstance(values, list):
            continue  # 只处理列表类型的值

        seen = set()
        flattened_values = flatten_and_deduplicate(values, seen)

        for count, value in enumerate(flattened_values):
            new_key = f"{key}-{count}"
            new_json[new_key] = value

    with open(target, "w", encoding="utf-8") as f:
        json.dump(new_json, f, ensure_ascii=False, indent=4)


def json_to_new_json(input_file, output_file):
    """
    读取 JSON 文件,去重后写入新 JSON 文件
    """
    with open(input_file, "r", encoding="utf-8") as f:
        data = json.load(f)

    new_data = extract_and_deduplicate(data)

    with open(output_file, "w", encoding="utf-8") as f:
        json.dump(new_data, f, ensure_ascii=False, indent=4)

    print(f"新 JSON 文件已保存至: {output_file}")


def load_translations(po_file):
    """
    读取 PO 文件并构建 msgid 到 msgstr 的映射
    """
    translations = {}
    po = polib.pofile(po_file)

    for entry in po:
        if entry.msgstr:
            translations[entry.msgid] = entry.msgstr

    return translations


def translate_json(input_json, translation_old_json, output_json):
    """
    读取 JSON 文件,匹配翻译并生成新 JSON 文件
    """
    with open(input_json, "r", encoding="utf-8") as f:
        data_source = json.load(f)
    with open(translation_old_json, "r", encoding="utf-8") as f:
        data_old = json.load(f)

    new_data = {key: data_old.get(key, "") for key, value in data_source.items()}

    with open(output_json, "w", encoding="utf-8") as f:
        json.dump(new_data, f, ensure_ascii=False, indent=4)

    print(f"翻译后的 JSON 文件已保存至: {output_json}")


extract_and_deduplicate("original.json", "ru_RU.json")
translate_json("ru_RU.json", "en_US.json", "en_US.json")
translate_json("ru_RU.json", "zh_CN.json", "zh_CN.json")