/**
 * Tribufu API
 * REST API to access Tribufu services.
 *
 * The version of the OpenAPI document: 1.1.0
 * Contact: contact@tribufu.com
 *
 * NOTE: This class is auto generated by OpenAPI-Generator 7.12.0.
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

/*
 * UserInfo.h
 *
 *
 */

#ifndef TRIBUFU_MODELS_UserInfo_H_
#define TRIBUFU_MODELS_UserInfo_H_

#include <stdexcept>

#include "tribufu++/ModelBase.h"

#include "tribufu++/model/UserType.h"
#include <cpprest/details/basic_types.h>

namespace tribufu
{
    namespace models
    {

        class UserInfo : public ModelBase
        {
        public:
            UserInfo();
            virtual ~UserInfo();

            /////////////////////////////////////////////
            /// ModelBase overrides

            void validate() override;

            web::json::value toJson() const override;
            bool fromJson(const web::json::value &json) override;

            void toMultipart(std::shared_ptr<MultipartFormData> multipart,
                             const utility::string_t &namePrefix) const override;
            bool fromMultiPart(std::shared_ptr<MultipartFormData> multipart,
                               const utility::string_t &namePrefix) override;

            /////////////////////////////////////////////
            /// UserInfo members

            utility::string_t getId() const;
            bool idIsSet() const;
            void unsetId();
            void setId(const utility::string_t &value);

            utility::string_t getUuid() const;
            bool uuidIsSet() const;
            void unsetUuid();
            void setUuid(const utility::string_t &value);

            utility::string_t getName() const;
            bool nameIsSet() const;
            void unsetName();
            void setName(const utility::string_t &value);

            utility::string_t getDisplayName() const;
            bool displayNameIsSet() const;
            void unsetDisplay_name();
            void setDisplayName(const utility::string_t &value);

            utility::string_t getEmail() const;
            bool emailIsSet() const;
            void unsetEmail();
            void setEmail(const utility::string_t &value);

            std::shared_ptr<UserType> getType() const;
            bool typeIsSet() const;
            void unsetType();
            void setType(const std::shared_ptr<UserType> &value);

            utility::string_t getFlags() const;
            bool flagsIsSet() const;
            void unsetFlags();
            void setFlags(const utility::string_t &value);

            utility::string_t getPermissions() const;
            bool permissionsIsSet() const;
            void unsetPermissions();
            void setPermissions(const utility::string_t &value);

            bool isVerified() const;
            bool verifiedIsSet() const;
            void unsetVerified();
            void setVerified(bool value);

            int32_t getLevel() const;
            bool levelIsSet() const;
            void unsetLevel();
            void setLevel(int32_t value);

            double getExperience() const;
            bool experienceIsSet() const;
            void unsetExperience();
            void setExperience(double value);

            bool isPublicBirthday() const;
            bool publicBirthdayIsSet() const;
            void unsetPublic_birthday();
            void setPublicBirthday(bool value);

            utility::datetime getBirthday() const;
            bool birthdayIsSet() const;
            void unsetBirthday();
            void setBirthday(const utility::datetime &value);

            double getPoints() const;
            bool pointsIsSet() const;
            void unsetPoints();
            void setPoints(double value);

            utility::string_t getLocation() const;
            bool locationIsSet() const;
            void unsetLocation();
            void setLocation(const utility::string_t &value);

            utility::string_t getLanguage() const;
            bool languageIsSet() const;
            void unsetLanguage();
            void setLanguage(const utility::string_t &value);

            utility::string_t getTimezone() const;
            bool timezoneIsSet() const;
            void unsetTimezone();
            void setTimezone(const utility::string_t &value);

            utility::string_t getCurrency() const;
            bool currencyIsSet() const;
            void unsetCurrency();
            void setCurrency(const utility::string_t &value);

            utility::string_t getPhotoUrl() const;
            bool photoUrlIsSet() const;
            void unsetPhoto_url();
            void setPhotoUrl(const utility::string_t &value);

            utility::string_t getBannerUrl() const;
            bool bannerUrlIsSet() const;
            void unsetBanner_url();
            void setBannerUrl(const utility::string_t &value);

            utility::datetime getLastOnline() const;
            bool lastOnlineIsSet() const;
            void unsetLast_online();
            void setLastOnline(const utility::datetime &value);

            utility::string_t getBiography() const;
            bool biographyIsSet() const;
            void unsetBiography();
            void setBiography(const utility::string_t &value);

            int32_t getViewCount() const;
            bool viewCountIsSet() const;
            void unsetView_count();
            void setViewCount(int32_t value);

            utility::datetime getCreated() const;
            bool createdIsSet() const;
            void unsetCreated();
            void setCreated(const utility::datetime &value);

            utility::datetime getUpdated() const;
            bool updatedIsSet() const;
            void unsetUpdated();
            void setUpdated(const utility::datetime &value);

        protected:
            utility::string_t m_Id;
            bool m_IdIsSet;

            utility::string_t m_Uuid;
            bool m_UuidIsSet;

            utility::string_t m_Name;
            bool m_NameIsSet;

            utility::string_t m_Display_name;
            bool m_Display_nameIsSet;

            utility::string_t m_Email;
            bool m_EmailIsSet;

            std::shared_ptr<UserType> m_Type;
            bool m_TypeIsSet;

            utility::string_t m_Flags;
            bool m_FlagsIsSet;

            utility::string_t m_Permissions;
            bool m_PermissionsIsSet;

            bool m_Verified;
            bool m_VerifiedIsSet;

            int32_t m_Level;
            bool m_LevelIsSet;

            double m_Experience;
            bool m_ExperienceIsSet;

            bool m_Public_birthday;
            bool m_Public_birthdayIsSet;

            utility::datetime m_Birthday;
            bool m_BirthdayIsSet;

            double m_Points;
            bool m_PointsIsSet;

            utility::string_t m_Location;
            bool m_LocationIsSet;

            utility::string_t m_Language;
            bool m_LanguageIsSet;

            utility::string_t m_Timezone;
            bool m_TimezoneIsSet;

            utility::string_t m_Currency;
            bool m_CurrencyIsSet;

            utility::string_t m_Photo_url;
            bool m_Photo_urlIsSet;

            utility::string_t m_Banner_url;
            bool m_Banner_urlIsSet;

            utility::datetime m_Last_online;
            bool m_Last_onlineIsSet;

            utility::string_t m_Biography;
            bool m_BiographyIsSet;

            int32_t m_View_count;
            bool m_View_countIsSet;

            utility::datetime m_Created;
            bool m_CreatedIsSet;

            utility::datetime m_Updated;
            bool m_UpdatedIsSet;
        };

    }
}

#endif /* TRIBUFU_MODELS_UserInfo_H_ */