from Classes.Commands.Client.LogicPurchaseOfferCommand import LogicPurchaseOfferCommand
from Classes.Commands.Client.LogicOpenRandomCommand import LogicOpenRandomCommand
from Classes.Commands.Server.LogicChangeAvatarNameCommand import LogicChangeAvatarNameCommand
from Classes.Commands.Server.LogicGiveDeliveryItemsCommand import LogicGiveDeliveryItemsCommand
from Classes.Commands.Server.LogicRefreshRandomRewardsCommand import LogicRefreshRandomRewardsCommand

from Classes.Commands.Client.LogicSelectSkinCommand import LogicSelectSkinCommand

from Classes.Commands.Client.LogicClaimRankUpRewardCommand import LogicClaimRankUpRewardCommand

from Classes.Commands.Client.LogicStarRoadRewardCommand import LogicStarRoadRewardCommand
from Classes.Commands.Server.LogicStarRoadRefreshCommand import LogicStarRoadRefreshCommand

from Classes.Commands.Client.LogicSetPlayerBattleCardCommand import LogicSetPlayerBattleCardCommand
from Classes.Commands.Client.LogicSetPlayerFavouriteBrawlerCommand import LogicSetPlayerFavouriteBrawlerCommand

from Classes.Commands.Client.LogicSelectEmoteCommand import LogicSelectEmoteCommand

from Classes.Commands.Client.LogicClaimMasteriesCommand import LogicClaimMasteriesCommand

from Classes.Commands.Client.LogicPurchaseBrawlerCommand import LogicPurchaseBrawlerCommand


from Classes.Commands.Client.LogicClaimTailRewardCommand import LogicClaimTailRewardCommand

from Classes.Commands.Client.LogicLevelUpCommand import LogicLevelUpCommand

from Classes.Commands.Client.LogicSetPlayerThumbnailCommand import LogicSetPlayerThumbnailCommand

from Classes.Commands.Client.LogicSetPlayerNameColorCommand import LogicSetPlayerNameColorCommand

from Classes.Commands.Client.LogicPurchaseBrawlPassCommand import LogicPurchaseBrawlPassCommand

from Classes.Commands.Client.LogicSetSupportedCreatorMessage import LogicSetSupportedCreatorCommand

from Classes.Commands.Client.LogicPurchaseBrawlpassProgressCommand import LogicPurchaseBrawlpassProgressCommand

from Classes.Commands.Server.LogicOffersChangedCommand import LogicOffersChangedCommand

from Classes.Commands.Client.LogicViewInboxNotificationCommand import LogicViewInboxNotificationCommand

from Classes.Commands.Client.LogicDailyLoginCommand import LogicDailyLoginCommand

from Classes.Commands.Client.LogicPurchaseAccessoryCommand import LogicPurchaseAccessoryCommand

from Classes.Commands.Client.LogicGemsAdded import LogicGemsAdded

class LogicCommandManager:
    commandsList = {
        201: LogicChangeAvatarNameCommand,
        202: LogicGemsAdded,
        203: LogicGiveDeliveryItemsCommand,
        204: 'LogicDayChangedCommand',
        205: 'LogicDecreaseHeroScoreCommand',
        206: 'LogicAddNotificationCommand',
        207: 'LogicChangeResourcesCommand',
        208: 'LogicTransactionsRevokedCommand',
        209: 'LogicPurchaseValuePackCommand',
        210: 'LogicIAPChangedCommand',
        211: LogicOffersChangedCommand,
        212: 'LogicPlayerDataChangedCommand',
        213: 'LogicInviteBlockingChangedCommand',
        214: 'LogicGemNameChangeStateChangedCommand',
        215: LogicSetSupportedCreatorCommand,
        216: 'LogicCooldownExpiredCommand',
        217: 'LogicProLeagueSeasonChangedCommand',
        218: 'LogicBrawlPassSeasonChangedCommand',
        219: 'LogicBrawlPassUnlockedCommand',
        220: 'LogicHerowinQuestsChangedCommand',
        221: 'LogicTeamChatMuteStateChangedCommand',
        222: 'LogicRankedSeasonChangedCommand',
        223: 'LogicCooldownAddedCommand',
        224: 'LogicSetESportsHubNotificationCommand',
        227: LogicStarRoadRefreshCommand,
        228: LogicRefreshRandomRewardsCommand,
        500: 'LogicGatchaCommand',
        503: 'LogicClaimDailyRewardCommand',
        504: 'LogicSendAllianceMailCommand',
        505: LogicSetPlayerThumbnailCommand,
        506: LogicSelectSkinCommand,
        507: 'LogicUnlockSkinCommand',
        508: 'LogicChangeControlModeCommand',
        509: 'LogicPurchaseDoubleCoinsCommand',
        511: 'LogicHelpOpenedCommand',
        512: 'LogicToggleInGameHintsCommand',
        514: 'LogicDeleteNotificationCommand',
        515: 'LogicClearShopTickersCommand',
        517: LogicClaimRankUpRewardCommand,
        518: 'LogicPurchaseTicketsCommand',
        519: LogicPurchaseOfferCommand,
        520: LogicLevelUpCommand,
        521: 'LogicPurchaseHeroLvlUpMaterialCommand',
        522: 'LogicHeroSeenCommand',
        523: 'LogicClaimAdRewardCommand',
        524: 'LogicVideoStartedCommand',
        525: 'LogicSelectCharacterCommand',
        526: 'LogicUnlockFreeSkinsCommand',
        527: LogicSetPlayerNameColorCommand,
        528: LogicViewInboxNotificationCommand,
        529: 'LogicSelectStarPowerCommand',
        530: 'LogicSetPlayerAgeCommand',
        531: 'LogicCancelPurchaseOfferCommand',
        532: 'LogicItemSeenCommand',
        533: 'LogicQuestSeenCommand',
        534: LogicPurchaseBrawlPassCommand,
        535: LogicClaimTailRewardCommand,
        536: LogicPurchaseBrawlpassProgressCommand,
        537: 'LogicVanityItemSeenCommand',
        538: LogicSelectEmoteCommand,
        539: 'LogicBrawlPassAutoCollectWarningSeenCommand',
        540: 'LogicPurchaseChallengeLivesCommand',
        541: 'LogicClearESportsHubNotificationCommand',
        542: 'LogicSelectGroupSkinCommand',
        550: LogicDailyLoginCommand,
        557: LogicPurchaseAccessoryCommand,
        560: LogicPurchaseBrawlerCommand,
        562: LogicStarRoadRewardCommand,
        568: LogicSetPlayerBattleCardCommand,
        569: LogicClaimMasteriesCommand,
        570: LogicSetPlayerFavouriteBrawlerCommand,
        571: LogicOpenRandomCommand
    }

    def getCommandsName(commandType):
        try:
            command = LogicCommandManager.commandsList[commandType]
        except KeyError:
            command = str(commandType)
        if type(command) == str:
            return command
        else:
            return command.__name__

    def commandExist(commandType):
        return (commandType in LogicCommandManager.commandsList.keys())

    def createCommand(commandType, commandPayload=b''):
        commandList = LogicCommandManager.commandsList
        if LogicCommandManager.commandExist(commandType):
            print(LogicCommandManager.getCommandsName(commandType), "created")
            if type(commandList[commandType]) == str:
                pass
            else:
                return commandList[commandType](commandPayload)
        else:
            print(commandType, "skipped")
            return None

    def isServerToClient(commandType):
        if 200 <= commandType < 500:
            return True
        elif 500 <= commandType:
            return False