from ...tl.tlobject import TLObject


class UpdateStickerSetsOrder(TLObject):
    """Class generated by TLObjects' generator. All changes will be ERASED. TL definition below.
    updateStickerSetsOrder#0bb2d201 flags:# masks:flags.0?true order:Vector<long> = Update"""

    # Telegram's constructor (U)ID for this class
    constructor_id = 0xbb2d201
    # Also the ID of its resulting type for fast checks
    subclass_of_id = 0x9f89304e

    def __init__(self, order, masks=None):
        """
        :param masks: Telegram type: "true".
        :param order: Telegram type: "long". Must be a list.

        Constructor for Update: Instance of either UpdateNewMessage, UpdateMessageID, UpdateDeleteMessages, UpdateUserTyping, UpdateChatUserTyping, UpdateChatParticipants, UpdateUserStatus, UpdateUserName, UpdateUserPhoto, UpdateContactRegistered, UpdateContactLink, UpdateNewEncryptedMessage, UpdateEncryptedChatTyping, UpdateEncryption, UpdateEncryptedMessagesRead, UpdateChatParticipantAdd, UpdateChatParticipantDelete, UpdateDcOptions, UpdateUserBlocked, UpdateNotifySettings, UpdateServiceNotification, UpdatePrivacy, UpdateUserPhone, UpdateReadHistoryInbox, UpdateReadHistoryOutbox, UpdateWebPage, UpdateReadMessagesContents, UpdateChannelTooLong, UpdateChannel, UpdateNewChannelMessage, UpdateReadChannelInbox, UpdateDeleteChannelMessages, UpdateChannelMessageViews, UpdateChatAdmins, UpdateChatParticipantAdmin, UpdateNewStickerSet, UpdateStickerSetsOrder, UpdateStickerSets, UpdateSavedGifs, UpdateBotInlineQuery, UpdateBotInlineSend, UpdateEditChannelMessage, UpdateChannelPinnedMessage, UpdateBotCallbackQuery, UpdateEditMessage, UpdateInlineBotCallbackQuery, UpdateReadChannelOutbox, UpdateDraftMessage, UpdateReadFeaturedStickers, UpdateRecentStickers, UpdateConfig, UpdatePtsChanged, UpdateChannelWebPage, UpdateDialogPinned, UpdatePinnedDialogs, UpdateBotWebhookJSON, UpdateBotWebhookJSONQuery, UpdateBotShippingQuery, UpdateBotPrecheckoutQuery, UpdatePhoneCall, UpdateLangPackTooLong, UpdateLangPack.
        """
        super().__init__()

        self.masks = masks
        self.order = order

    def to_dict(self):
        return {
            'masks': self.masks,
            'order': [] if self.order is None else self.order[:],
        }

    def on_send(self, writer):
        writer.write_int(UpdateStickerSetsOrder.constructor_id, signed=False)
        # Calculate the flags. This equals to those flag arguments which are NOT None
        flags = 0
        flags |= (1 << 0) if self.masks else 0
        writer.write_int(flags)

        writer.write_int(0x1cb5c415, signed=False)  # Vector's constructor ID
        writer.write_int(len(self.order))
        for _x in self.order:
            writer.write_long(_x)

    @staticmethod
    def empty():
        """Returns an "empty" instance (attributes=None)"""
        return UpdateStickerSetsOrder(None, None)

    def on_response(self, reader):
        flags = reader.read_int()

        if (flags & (1 << 0)) != 0:
            self.masks = True  # Arbitrary not-None value, no need to read since it is a flag

        reader.read_int()  # Vector's constructor ID
        self.order = []  # Initialize an empty list
        _len = reader.read_int()
        for _ in range(_len):
            _x = reader.read_long()
            self.order.append(_x)

    def __repr__(self):
        return 'updateStickerSetsOrder#0bb2d201 flags:# masks:flags.0?true order:Vector<long> = Update'

    def __str__(self):
        return TLObject.pretty_format(self)

    def stringify(self):
        return TLObject.pretty_format(self, indent=0)
