# UserAll 有关的一些辅助函数

import pytz
from datetime import datetime
from Config import *
from HelperGetUserThing import implGetUser_

def generateFullUserAll(userId, currentLoginResult, currentLoginTimestamp, currentUserData2, currentSpecialNumber):
    """从服务器取得必要的数据并构建一个比较完整的 UserAll"""

    # 先构建一个基础 UserAll
    currentUserAll = generateUserAllData(userId, currentLoginResult, currentLoginTimestamp, currentUserData2, currentSpecialNumber)

    # 然后从服务器取得必要的数据
    currentUserExtend = implGetUser_("Extend", userId, True)
    currentUserOption = implGetUser_("Option", userId, True)
    currentUserRating = implGetUser_("Rating", userId, True)
    currentUserActivity = implGetUser_("Activity", userId, True)
    currentUserCharge = implGetUser_("Charge", userId, True)

    # 把这些数据都追加进去
    currentUserAll['upsertUserAll']['userExtend'] = [currentUserExtend['userExtend']]
    currentUserAll['upsertUserAll']['userOption'] = [currentUserOption['userOption']]
    currentUserAll['upsertUserAll']['userRatingList'] = [currentUserRating['userRating']]
    currentUserAll['upsertUserAll']['userActivityList'] = [currentUserActivity['userActivity']]
    currentUserAll['upsertUserAll']['userChargeList'] = currentUserCharge['userChargeList']

    # 完事
    return currentUserAll


def generateUserAllData(userId, currentLoginResult, currentLoginTimestamp, currentUserData2, currentSpecialNumber):
    """构建一个非常基础的 UserAll 数据,必须手动填充一些数据"""

    data = {
        "userId": userId,
        "playlogId": currentLoginResult['loginId'],
        "isEventMode": False,
        "isFreePlay": False,
        "upsertUserAll": {
            "userData": [
                {
                    "accessCode": "",
                    "userName": currentUserData2['userName'],
                    "isNetMember": 1,
                    "iconId": currentUserData2['iconId'],
                    "plateId": currentUserData2['plateId'],
                    "titleId": currentUserData2['titleId'],
                    "partnerId": currentUserData2['partnerId'],
                    "frameId": currentUserData2['frameId'],
                    "selectMapId": currentUserData2['selectMapId'],
                    "totalAwake": currentUserData2['totalAwake'],
                    "gradeRating": currentUserData2['gradeRating'],
                    "musicRating": currentUserData2['musicRating'],
                    "playerRating": currentUserData2['playerRating'],
                    "highestRating": currentUserData2['highestRating'],
                    "gradeRank": currentUserData2['gradeRank'],
                    "classRank": currentUserData2['classRank'],
                    "courseRank": currentUserData2['courseRank'],
                    "charaSlot": currentUserData2['charaSlot'],
                    "charaLockSlot": currentUserData2['charaLockSlot'],
                    "contentBit": currentUserData2['contentBit'],
                    "playCount": currentUserData2['playCount'],
                    "currentPlayCount": currentUserData2['currentPlayCount'],
                    "renameCredit": 0,
                    "mapStock": currentUserData2['mapStock'],
                    "eventWatchedDate": currentUserData2['eventWatchedDate'],
                    "lastGameId": "SDGB",
                    "lastRomVersion": currentUserData2['lastRomVersion'],
                    "lastDataVersion": currentUserData2['lastDataVersion'],
                    "lastLoginDate": currentLoginResult['lastLoginDate'], # sb
                    "lastPlayDate": datetime.now(pytz.timezone('Asia/Shanghai')).strftime('%Y-%m-%d %H:%M:%S') + '.0',
                    "lastPlayCredit": 1,
                    "lastPlayMode": 0,
                    "lastPlaceId": placeId,
                    "lastPlaceName": placeName,
                    "lastAllNetId": 0,
                    "lastRegionId": regionId,
                    "lastRegionName": regionName,
                    "lastClientId": clientId,
                    "lastCountryCode": "CHN",
                    "lastSelectEMoney": 0,
                    "lastSelectTicket": 0,
                    "lastSelectCourse": currentUserData2['lastSelectCourse'],
                    "lastCountCourse": 0,
                    "firstGameId": "SDGB",
                    "firstRomVersion": currentUserData2['firstRomVersion'],
                    "firstDataVersion": currentUserData2['firstDataVersion'],
                    "firstPlayDate": currentUserData2['firstPlayDate'],
                    "compatibleCmVersion": currentUserData2['compatibleCmVersion'],
                    "dailyBonusDate": currentUserData2['dailyBonusDate'],
                    "dailyCourseBonusDate": currentUserData2['dailyCourseBonusDate'],
                    "lastPairLoginDate": currentUserData2['lastPairLoginDate'],
                    "lastTrialPlayDate": currentUserData2['lastTrialPlayDate'],
                    "playVsCount": 0,
                    "playSyncCount": 0,
                    "winCount": 0,
                    "helpCount": 0,
                    "comboCount": 0,
                    "totalDeluxscore": currentUserData2['totalDeluxscore'],
                    "totalBasicDeluxscore": currentUserData2['totalBasicDeluxscore'],
                    "totalAdvancedDeluxscore": currentUserData2['totalAdvancedDeluxscore'],
                    "totalExpertDeluxscore": currentUserData2['totalExpertDeluxscore'],
                    "totalMasterDeluxscore": currentUserData2['totalMasterDeluxscore'],
                    "totalReMasterDeluxscore": currentUserData2['totalReMasterDeluxscore'],
                    "totalSync": currentUserData2['totalSync'],
                    "totalBasicSync": currentUserData2['totalBasicSync'],
                    "totalAdvancedSync": currentUserData2['totalAdvancedSync'],
                    "totalExpertSync": currentUserData2['totalExpertSync'],
                    "totalMasterSync": currentUserData2['totalMasterSync'],
                    "totalReMasterSync": currentUserData2['totalReMasterSync'],
                    "totalAchievement": currentUserData2['totalAchievement'],
                    "totalBasicAchievement": currentUserData2['totalBasicAchievement'],
                    "totalAdvancedAchievement": currentUserData2['totalAdvancedAchievement'],
                    "totalExpertAchievement": currentUserData2['totalExpertAchievement'],
                    "totalMasterAchievement": currentUserData2['totalMasterAchievement'],
                    "totalReMasterAchievement": currentUserData2['totalReMasterAchievement'],
                    "playerOldRating": currentUserData2['playerOldRating'],
                    "playerNewRating": currentUserData2['playerNewRating'],
                    "banState": 0,
                    "dateTime": currentLoginTimestamp
                }
            ],
            "userExtend": [], #需要填上
            "userOption": [], #需要填上
            "userGhost": [],
            "userCharacterList": [],
            "userMapList": [],
            "userLoginBonusList": [],
            "userRatingList": [], #需要填上
            "userItemList": [], #可选,但经常要填上
            "userMusicDetailList": [],#需要填上
            "userCourseList": [],
            "userFriendSeasonRankingList": [],
            "userChargeList": [], #需要填上
            "userFavoriteList": [],
            "userActivityList": [], #需要填上
            "userGamePlaylogList": [
                {
                    "playlogId": currentLoginResult['loginId'],
                    "version": "1.41.00",
                    "playDate": datetime.now(pytz.timezone('Asia/Shanghai')).strftime('%Y-%m-%d %H:%M:%S') + '.0',
                    "playMode": 0,
                    "useTicketId": -1,
                    "playCredit": 1,
                    "playTrack": 1,
                    "clientId": clientId,
                    "isPlayTutorial": False,
                    "isEventMode": False,
                    "isNewFree": False,
                    "playCount": currentUserData2['playCount'],
                    "playSpecial": currentSpecialNumber,
                    "playOtherUserId": 0
                }
            ],
            "user2pPlaylog": {
                "userId1": 0,
                "userId2": 0,
                "userName1": "",
                "userName2": "",
                "regionId": 0,
                "placeId": 0,
                "user2pPlaylogDetailList": []
            },
            "isNewCharacterList": "",
            "isNewMapList": "",
            "isNewLoginBonusList": "",
            "isNewItemList": "",
            "isNewMusicDetailList": "", #可选但经常要填上 
            "isNewCourseList": "0",
            "isNewFavoriteList": "",
            "isNewFriendSeasonRankingList": ""
            }
        }
    return data