# 感谢伟大的 Diving-Fish 让我被迫直面恐惧写这个逼玩意

import xml.dom.minidom as minidom
from pathlib import Path
import json
from loguru import logger

def makeMusicDBJson():
    '''
    从 HDD 的文件来生成 music_db.json
    推荐的是如果要国服用 那就用国际服的文件来生成
    免得国服每次更新还要重新生成太麻烦
    '''
    # 记得改
    A000_DIR = Path('/run/media/remik1r3n/软件/maimaiDX_SDGB/Sinmai_Data/StreamingAssets/A000')
    OPTION_DIR = Path('/run/media/remik1r3n/软件/maimaiDX_SDGB/Sinmai_Data/StreamingAssets')

    music_db: dict[str, dict[str, str | int]] = {}
    DEST_PATH = Path('./musicDB.json')

    music_folders = [f for f in (A000_DIR / 'music').iterdir() if f.is_dir()]
    for option_dir in OPTION_DIR.iterdir():
        if (option_dir / 'music').exists():
            music_folders.extend([f for f in (option_dir / 'music').iterdir() if f.is_dir()])

    for folder in music_folders:
        xml_path = (folder / 'Music.xml')
        if xml_path.exists():
            xml = minidom.parse(xml_path.as_posix())
            data = xml.getElementsByTagName('MusicData')[0]
            music_id = data.getElementsByTagName('name')[0].getElementsByTagName('id')[0].firstChild.data
            music_name = data.getElementsByTagName('name')[0].getElementsByTagName('str')[0].firstChild.data
            music_version = data.getElementsByTagName('AddVersion')[0].getElementsByTagName('id')[0].firstChild.data
            music_db[music_id] = {
                "name": music_name,
                "version": int(music_version)
            }
    logger.debug(f'Found {len(music_db)} music data')
    serialized = '{\n'
    sorted_keys = sorted(music_db.keys(), key=lambda x: int(x))
    for key in sorted_keys:
        value = music_db[key]
        serialized += f'  "{key}": {json.dumps(value, ensure_ascii=False)},\n'
    serialized = serialized[:-2] + '\n}'

    with open(DEST_PATH, 'w') as f:
        f.write(serialized)

if __name__ == '__main__':
    makeMusicDBJson()
    print('Done.')