from ...tl.mtproto_request import MTProtoRequest


class UpdatePrivacy(MTProtoRequest):
    """Class generated by TLObjects' generator. All changes will be ERASED. Original .tl definition below.
    updatePrivacy#ee3b272a key:PrivacyKey rules:Vector<PrivacyRule> = Update"""

    # Telegram's constructor ID (and unique identifier) for this class
    constructor_id = 0xee3b272a

    def __init__(self, key, rules):
        """
        :param key: Telegram type: «PrivacyKey».
        :param rules: Telegram type: «PrivacyRule». 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.
        """
        super().__init__()

        self.key = key
        self.rules = rules

    def on_send(self, writer):
        writer.write_int(UpdatePrivacy.constructor_id, signed=False)
        self.key.on_send(writer)
        writer.write_int(0x1cb5c415, signed=False)  # Vector's constructor ID
        writer.write_int(len(self.rules))
        for rules_item in self.rules:
            rules_item.on_send(writer)

    @staticmethod
    def empty():
        """Returns an "empty" instance (all attributes are None)"""
        return UpdatePrivacy(None, None)

    def on_response(self, reader):
        self.key = reader.tgread_object()
        reader.read_int()  # Vector's constructor ID
        self.rules = []  # Initialize an empty list
        rules_len = reader.read_int()
        for _ in range(rules_len):
            rules_item = reader.tgread_object()
            self.rules.append(rules_item)

    def __repr__(self):
        return 'updatePrivacy#ee3b272a key:PrivacyKey rules:Vector<PrivacyRule> = Update'

    def __str__(self):
        return '(updatePrivacy (ID: 0xee3b272a) = (key={}, rules={}))'.format(str(self.key), None if not self.rules else [str(_) for _ in self.rules])
