# 上传一个占位用的游玩记录的 API 实现

import rapidjson as json
import pytz
import time
import random
from datetime import datetime
from loguru import logger

from API_TitleServer import apiSDGB
from Config import *

def apiUploadUserPlaylog(userId:int, musicDataToBeUploaded, currentUserData2, loginId:int) -> str:
    """
    上传一个 UserPlayLog。
    注意:成绩为随机的空成绩,只用作占位
    返回 Json String。"""

    # 构建一个 PlayLog
    data = json.dumps({
    "userId": int(userId),
    "userPlaylog": {
        "userId": 0, 
        "orderId": 0,
        "playlogId": loginId,
        "version": 1041000,
        "placeId": placeId,
        "placeName": placeName,
        "loginDate": int(time.time()), #似乎和登录timestamp不同
        "playDate": datetime.now(pytz.timezone('Asia/Shanghai')).strftime('%Y-%m-%d'),
        "userPlayDate": datetime.now(pytz.timezone('Asia/Shanghai')).strftime('%Y-%m-%d %H:%M:%S') + '.0',
        "type": 0,
        "musicId": int(musicDataToBeUploaded['musicId']),
        "level": int(musicDataToBeUploaded['level']),
        "trackNo": 1,
        "vsMode": 0,
        "vsUserName": "",
        "vsStatus": 0,
        "vsUserRating": 0,
        "vsUserAchievement": 0,
        "vsUserGradeRank": 0,
        "vsRank": 0,
        "playerNum": 1,
        "playedUserId1": 0,
        "playedUserName1": "",
        "playedMusicLevel1": 0,
        "playedUserId2": 0,
        "playedUserName2": "",
        "playedMusicLevel2": 0,
        "playedUserId3": 0,
        "playedUserName3": "",
        "playedMusicLevel3": 0,
        "characterId1": currentUserData2['charaSlot'][0],
        "characterLevel1": random.randint(1000,6500),
        "characterAwakening1": 5,
        "characterId2": currentUserData2['charaSlot'][1],
        "characterLevel2": random.randint(1000,6500),
        "characterAwakening2": 5,
        "characterId3": currentUserData2['charaSlot'][2],
        "characterLevel3": random.randint(1000,6500),
        "characterAwakening3": 5,
        "characterId4": currentUserData2['charaSlot'][3],
        "characterLevel4": random.randint(1000,6500),
        "characterAwakening4": 5,
        "characterId5": currentUserData2['charaSlot'][4],
        "characterLevel5": random.randint(1000,6500),
        "characterAwakening5": 5,
        "achievement": int(musicDataToBeUploaded['achievement']),
        "deluxscore": int(musicDataToBeUploaded['deluxscoreMax']),
        "scoreRank": int(musicDataToBeUploaded['scoreRank']),
        "maxCombo": 0,
        "totalCombo": random.randint(700,900),
        "maxSync": 0,
        "totalSync": 0,
        "tapCriticalPerfect": 0,
        "tapPerfect": 0,
        "tapGreat": 0,
        "tapGood": 0,
        "tapMiss": random.randint(1,10),
        "holdCriticalPerfect": 0,
        "holdPerfect": 0,
        "holdGreat": 0,
        "holdGood": 0,
        "holdMiss": random.randint(1,15),
        "slideCriticalPerfect": 0,
        "slidePerfect": 0,
        "slideGreat": 0,
        "slideGood": 0,
        "slideMiss": random.randint(1,15),
        "touchCriticalPerfect": 0,
        "touchPerfect": 0,
        "touchGreat": 0,
        "touchGood": 0,
        "touchMiss": random.randint(1,15),
        "breakCriticalPerfect": 0,
        "breakPerfect": 0,
        "breakGreat": 0,
        "breakGood": 0,
        "breakMiss": random.randint(1,15),
        "isTap": True,
        "isHold": True,
        "isSlide": True,
        "isTouch": True,
        "isBreak": True,
        "isCriticalDisp": True,
        "isFastLateDisp": True,
        "fastCount": 0,
        "lateCount": 0,
        "isAchieveNewRecord": True,
        "isDeluxscoreNewRecord": True,
        "comboStatus": 0,
        "syncStatus": 0,
        "isClear": False,
        'beforeRating': currentUserData2['playerRating'],
        'afterRating': currentUserData2['playerRating'],
        "beforeGrade": 0,
        "afterGrade": 0,
        "afterGradeRank": 1,
        'beforeDeluxRating': currentUserData2['playerRating'],
        'afterDeluxRating': currentUserData2['playerRating'],
        "isPlayTutorial": False,
        "isEventMode": False,
        "isFreedomMode": False,
        "playMode": 0,
        "isNewFree": False,
        "trialPlayAchievement": -1,
        "extNum1": 0,
        "extNum2": 0,
        "extNum4": 3020,
        "extBool1": False
        }
    })
    # 发送请求
    result = apiSDGB(data, "UploadUserPlaylogApi", userId)
    logger.info("上传游玩记录:结果:"+ str(result))
    # 返回响应
    return result