from ...tl.tlobject import TLObject


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

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

    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, UpdateLangPackTooLong, UpdateLangPack.
        """
        super().__init__()

        self.user_id = user_id
        self.first_name = first_name
        self.last_name = last_name
        self.username = username

    def to_dict(self):
        return {
            'user_id': self.user_id,
            'first_name': self.first_name,
            'last_name': self.last_name,
            'username': self.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 (attributes=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 TLObject.pretty_format(self)

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