// This file generated by libqtelegram-code-generator.
// You can download it from: https://github.com/Aseman-Land/libqtelegram-code-generator
// DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN

#ifndef LQTG_FNC_ACCOUNT
#define LQTG_FNC_ACCOUNT

#include "telegramfunctionobject.h"
#include <QtGlobal>
#include <QString>
#include "telegram/types/inputnotifypeer.h"
#include "telegram/types/inputpeernotifysettings.h"
#include "telegram/types/peernotifysettings.h"
#include "telegram/types/user.h"
#include <QList>
#include "telegram/types/wallpaper.h"
#include "telegram/types/accountprivacyrules.h"
#include "telegram/types/inputprivacykey.h"
#include "telegram/types/inputprivacyrule.h"
#include "telegram/types/accountdaysttl.h"
#include "telegram/types/accountsentchangephonecode.h"
#include "telegram/types/accountauthorizations.h"
#include "telegram/types/accountpassword.h"
#include "telegram/types/accountpasswordsettings.h"
#include <QByteArray>
#include "telegram/types/accountpasswordinputsettings.h"

namespace Tg {
namespace Functions {

class LIBQTELEGRAMSHARED_EXPORT Account : public TelegramFunctionObject
{
public:
    enum AccountFunction {
        fncAccountRegisterDevice = 0x446c712c,
        fncAccountUnregisterDevice = 0x65c55b40,
        fncAccountUpdateNotifySettings = 0x84be5b93,
        fncAccountGetNotifySettings = 0x12b3ad31,
        fncAccountResetNotifySettings = 0xdb7e1747,
        fncAccountUpdateProfile = 0xf0888d68,
        fncAccountUpdateStatus = 0x6628562c,
        fncAccountGetWallPapers = 0xc04cfac2,
        fncAccountCheckUsername = 0x2714d86c,
        fncAccountUpdateUsername = 0x3e0bdd7c,
        fncAccountGetPrivacy = 0xdadbc950,
        fncAccountSetPrivacy = 0xc9f81ce8,
        fncAccountDeleteAccount = 0x418d4e0b,
        fncAccountGetAccountTTL = 0x8fc711d,
        fncAccountSetAccountTTL = 0x2442485e,
        fncAccountSendChangePhoneCode = 0xa407a8f4,
        fncAccountChangePhone = 0x70c32edb,
        fncAccountUpdateDeviceLocked = 0x38df3532,
        fncAccountGetAuthorizations = 0xe320c158,
        fncAccountResetAuthorization = 0xdf77f3bc,
        fncAccountGetPassword = 0x548a30f5,
        fncAccountGetPasswordSettings = 0xbc8d11bb,
        fncAccountUpdatePasswordSettings = 0xfa7c4b86
    };

    Account();
    virtual ~Account();

    static bool registerDevice(OutboundPkt *out, qint32 tokenType, const QString &token, const QString &deviceModel, const QString &systemVersion, const QString &appVersion, bool appSandbox, const QString &langCode);
    static bool registerDeviceResult(InboundPkt *in);

    static bool unregisterDevice(OutboundPkt *out, qint32 tokenType, const QString &token);
    static bool unregisterDeviceResult(InboundPkt *in);

    static bool updateNotifySettings(OutboundPkt *out, const InputNotifyPeer &peer, const InputPeerNotifySettings &settings);
    static bool updateNotifySettingsResult(InboundPkt *in);

    static bool getNotifySettings(OutboundPkt *out, const InputNotifyPeer &peer);
    static PeerNotifySettings getNotifySettingsResult(InboundPkt *in);

    static bool resetNotifySettings(OutboundPkt *out);
    static bool resetNotifySettingsResult(InboundPkt *in);

    static bool updateProfile(OutboundPkt *out, const QString &firstName, const QString &lastName);
    static User updateProfileResult(InboundPkt *in);

    static bool updateStatus(OutboundPkt *out, bool offline);
    static bool updateStatusResult(InboundPkt *in);

    static bool getWallPapers(OutboundPkt *out);
    static QList<WallPaper> getWallPapersResult(InboundPkt *in);

    static bool checkUsername(OutboundPkt *out, const QString &username);
    static bool checkUsernameResult(InboundPkt *in);

    static bool updateUsername(OutboundPkt *out, const QString &username);
    static User updateUsernameResult(InboundPkt *in);

    static bool getPrivacy(OutboundPkt *out, const InputPrivacyKey &key);
    static AccountPrivacyRules getPrivacyResult(InboundPkt *in);

    static bool setPrivacy(OutboundPkt *out, const InputPrivacyKey &key, const QList<InputPrivacyRule> &rules);
    static AccountPrivacyRules setPrivacyResult(InboundPkt *in);

    static bool deleteAccount(OutboundPkt *out, const QString &reason);
    static bool deleteAccountResult(InboundPkt *in);

    static bool getAccountTTL(OutboundPkt *out);
    static AccountDaysTTL getAccountTTLResult(InboundPkt *in);

    static bool setAccountTTL(OutboundPkt *out, const AccountDaysTTL &ttl);
    static bool setAccountTTLResult(InboundPkt *in);

    static bool sendChangePhoneCode(OutboundPkt *out, const QString &phoneNumber);
    static AccountSentChangePhoneCode sendChangePhoneCodeResult(InboundPkt *in);

    static bool changePhone(OutboundPkt *out, const QString &phoneNumber, const QString &phoneCodeHash, const QString &phoneCode);
    static User changePhoneResult(InboundPkt *in);

    static bool updateDeviceLocked(OutboundPkt *out, qint32 period);
    static bool updateDeviceLockedResult(InboundPkt *in);

    static bool getAuthorizations(OutboundPkt *out);
    static AccountAuthorizations getAuthorizationsResult(InboundPkt *in);

    static bool resetAuthorization(OutboundPkt *out, qint64 hash);
    static bool resetAuthorizationResult(InboundPkt *in);

    static bool getPassword(OutboundPkt *out);
    static AccountPassword getPasswordResult(InboundPkt *in);

    static bool getPasswordSettings(OutboundPkt *out, const QByteArray &currentPasswordHash);
    static AccountPasswordSettings getPasswordSettingsResult(InboundPkt *in);

    static bool updatePasswordSettings(OutboundPkt *out, const QByteArray &currentPasswordHash, const AccountPasswordInputSettings &newSettings);
    static bool updatePasswordSettingsResult(InboundPkt *in);

};

}
}

#endif // LQTG_FNC_ACCOUNT
