import requests
import json
from opencc import OpenCC

# 初始化 OpenCC 转换器
cc = OpenCC("s2t")

# 语言映射配置
language_map = {
    "zh-cn": "zh",
    "zh-tw": "zh",  # 简体转繁体
    "en-us": "en",
    "ja-jp": "ja",
    "ko-kr": "ko",
}

# 类型映射配置
type_map = {
    "weapon": {
        "zh-cn": "光锥",
        "zh-tw": "光錐",
        "en-us": "Light Cone",
        "ja-jp": "光円錐",
        "ko-kr": "무기",
    },
    "character": {
        "zh-cn": "角色",
        "zh-tw": "角色",
        "en-us": "Character",
        "ja-jp": "キャラ",
        "ko-kr": "캐릭터",
    },
}


def fetch_json(url):
    response = requests.get(url)
    response.raise_for_status()
    return response.json()


def transform_data(data, item_type):
    transformed = {lang: {} for lang in language_map.keys()}
    for id, item in data.items():
        for lang, key in language_map.items():
            name = item[key] if lang != "zh-tw" else cc.convert(item["zh"])
            transformed[lang][id] = {
                "name": name,
                "item_type": type_map[item_type][lang],
                "rank_type": item["rank"][-1],
            }
    return transformed


def main():
    try:
        version_url = "https://static.nanoka.cc/manifest.json"
        version_data = fetch_json(version_url)

        latest_version = version_data['hsr']['live']
        print(f"Latest version: {latest_version}")
        
        weapon_url = f"https://static.nanoka.cc/hsr/{latest_version}/lightcone.json"
        character_url = f"https://static.nanoka.cc/hsr/{latest_version}/character.json"
        weapon_data = fetch_json(weapon_url)
        print("Fetched", len(weapon_data), "lightcones")
        character_data = fetch_json(character_url)
        print("Fetched", len(character_data), "characters")

        transformed_data = {lang: {} for lang in language_map.keys()}

        transformed_data["version"] = latest_version

        weapon_transformed = transform_data(weapon_data, "weapon")
        character_transformed = transform_data(character_data, "character")

        for lang in language_map.keys():
            transformed_data[lang].update(weapon_transformed[lang])
            transformed_data[lang].update(character_transformed[lang])

        with open("./src/idJson.json", "w", encoding="utf-8") as f:
            json.dump(transformed_data, f, ensure_ascii=False, indent=2)

    except requests.RequestException as e:
        print(f"Error fetching data: {e}")


if __name__ == "__main__":
    main()
