# 获取用户成绩的各种实现
from API_TitleServer import *
from HelperLogInOut import apiLogin, apiLogout, generateTimestamp
from Config import *
import rapidjson as json
from HelperMusicDB import getMusicTitle
from loguru import logger
import sys

# 日志设置
#log_level = "DEBUG"
#log_format = "<green>{time:YYYY-MM-DD HH:mm:ss.SSS zz}</green> | <level>{level: <8}</level> | <yellow>Line {line: >4} ({file}):</yellow> <b>{message}</b>"
#logger.add(sys.stderr, level=log_level, format=log_format, colorize=True, backtrace=True, diagnose=True)
#logger.add("file.log", level=log_level, format=log_format, colorize=False, backtrace=True, diagnose=True)

def getUserMusicDetail(userId:int, nextIndex:int=0, maxCount:int=50) -> dict:
    """获取用户的成绩的API"""
    data = json.dumps({
        "userId": int(userId),
        "nextIndex": nextIndex,
        "maxCount": maxCount
    })
    return json.loads(apiSDGB(data, "GetUserMusicApi", userId))

def getUserFullMusicDetail(userId: int):
    """获取用户的全部成绩"""
    currentUserMusicDetailList = []
    nextIndex:int|None = None # 初始化 nextIndex
    while nextIndex != 0 or nextIndex is None: #只要还有nextIndex就一直获取获取
        userMusicResponse = getUserMusicDetail(userId, nextIndex or 0)
        nextIndex = userMusicResponse['nextIndex']
        logger.info(f"NextIndex: {nextIndex}")
        # 处理已经没有 userMusicList 的情况
        if not userMusicResponse['userMusicList']:
            break
        # 只要还有 userMusicList 就一直加进去,直到全部获取完毕
        for currentMusic in userMusicResponse['userMusicList']:
            for currentMusicDetail in currentMusic['userMusicDetailList']:
                if not currentMusicDetail['playCount'] > 0:
                    continue
                currentUserMusicDetailList.append(currentMusicDetail)
    return currentUserMusicDetailList

def parseUserFullMusicDetail(userFullMusicDetailList: list):
    """解析用户的全部成绩,给出一个迫真人类可读 list 套 dict"""
    musicDetailList = []
    for currentMusicDetail in userFullMusicDetailList:
        musicDetailList.append({
            '歌名': getMusicTitle(currentMusicDetail['musicId']),
            '难度': currentMusicDetail['level'],
            '分数': currentMusicDetail['achievement'] / 10000,
            'DX分数': currentMusicDetail['deluxscoreMax']
        })
    return musicDetailList

if __name__ == '__main__':
    userId = testUid
    userFullMusicDetailList = getUserFullMusicDetail(userId)
    parsedUserFullMusicDetail = parseUserFullMusicDetail(userFullMusicDetailList)
    logger.info(parsedUserFullMusicDetail)