from ...tl.mtproto_request import MTProtoRequest


class UpdateUserName(MTProtoRequest):
    """Class generated by TLObjects' generator. All changes will be ERASED. Original .tl definition below.
    updateUserName#a7332b73 user_id:int first_name:string last_name:string username:string = Update"""

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

    def __init__(self, user_id, first_name, last_name, username):
        """
        :param user_id: Telegram type: «int».
        :param first_name: Telegram type: «string».
        :param last_name: Telegram type: «string».
        :param username: Telegram type: «string».

        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.user_id = user_id
        self.first_name = first_name
        self.last_name = last_name
        self.username = username

    def on_send(self, writer):
        writer.write_int(UpdateUserName.constructor_id, signed=False)
        writer.write_int(self.user_id)
        writer.tgwrite_string(self.first_name)
        writer.tgwrite_string(self.last_name)
        writer.tgwrite_string(self.username)

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

    def on_response(self, reader):
        self.user_id = reader.read_int()
        self.first_name = reader.tgread_string()
        self.last_name = reader.tgread_string()
        self.username = reader.tgread_string()

    def __repr__(self):
        return 'updateUserName#a7332b73 user_id:int first_name:string last_name:string username:string = Update'

    def __str__(self):
        return '(updateUserName (ID: 0xa7332b73) = (user_id={}, first_name={}, last_name={}, username={}))'.format(str(self.user_id), str(self.first_name), str(self.last_name), str(self.username))
