/**
* Nudm_SDM
* Nudm Subscriber Data Management Service. � 2019, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TSDSI, TTA, TTC). All rights reserved. 
*
* The version of the OpenAPI document: 2.1.0.alpha-1
* 
*
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
* https://openapi-generator.tech
* Do not edit the class manually.
*/
/*
 * AccessAndMobilitySubscriptionData.h
 *
 * 
 */

#ifndef AccessAndMobilitySubscriptionData_H_
#define AccessAndMobilitySubscriptionData_H_


#include "Nssai.h"
#include "SorInfo.h"
#include "CoreNetworkType.h"
#include "UpuInfo.h"
#include "Area.h"
#include "OdbPacketServices.h"
#include "RatType.h"
#include <string>
#include "AmbrRm.h"
#include "TraceData.h"
#include <vector>
#include <nlohmann/json.hpp>

namespace oai {
namespace udm {
namespace model {

/// <summary>
/// 
/// </summary>
class  AccessAndMobilitySubscriptionData
{
public:
    AccessAndMobilitySubscriptionData();
    virtual ~AccessAndMobilitySubscriptionData();

    void validate();

    /////////////////////////////////////////////
    /// AccessAndMobilitySubscriptionData members

    /// <summary>
    /// 
    /// </summary>
    std::string getSupportedFeatures() const;
    void setSupportedFeatures(std::string const& value);
    bool supportedFeaturesIsSet() const;
    void unsetSupportedFeatures();
    /// <summary>
    /// 
    /// </summary>
    std::vector<std::string>& getGpsis();
    bool gpsisIsSet() const;
    void unsetGpsis();
    /// <summary>
    /// 
    /// </summary>
    std::vector<std::string>& getInternalGroupIds();
    bool internalGroupIdsIsSet() const;
    void unsetInternalGroupIds();
    /// <summary>
    /// 
    /// </summary>
    AmbrRm getSubscribedUeAmbr() const;
    void setSubscribedUeAmbr(AmbrRm const& value);
    bool subscribedUeAmbrIsSet() const;
    void unsetSubscribedUeAmbr();
    /// <summary>
    /// 
    /// </summary>
    Nssai getNssai() const;
    void setNssai(Nssai const& value);
    bool nssaiIsSet() const;
    void unsetNssai();
    /// <summary>
    /// 
    /// </summary>
    std::vector<RatType>& getRatRestrictions();
    bool ratRestrictionsIsSet() const;
    void unsetRatRestrictions();
    /// <summary>
    /// 
    /// </summary>
    std::vector<Area>& getForbiddenAreas();
    bool forbiddenAreasIsSet() const;
    void unsetForbiddenAreas();
    /// <summary>
    /// 
    /// </summary>
    std::vector<CoreNetworkType>& getCoreNetworkTypeRestrictions();
    bool coreNetworkTypeRestrictionsIsSet() const;
    void unsetCoreNetworkTypeRestrictions();
    /// <summary>
    /// 
    /// </summary>
    int32_t getRfspIndex() const;
    void setRfspIndex(int32_t const value);
    bool rfspIndexIsSet() const;
    void unsetRfspIndex();
    /// <summary>
    /// 
    /// </summary>
    int32_t getSubsRegTimer() const;
    void setSubsRegTimer(int32_t const value);
    bool subsRegTimerIsSet() const;
    void unsetSubsRegTimer();
    /// <summary>
    /// 
    /// </summary>
    int32_t getUeUsageType() const;
    void setUeUsageType(int32_t const value);
    bool ueUsageTypeIsSet() const;
    void unsetUeUsageType();
    /// <summary>
    /// 
    /// </summary>
    bool isMpsPriority() const;
    void setMpsPriority(bool const value);
    bool mpsPriorityIsSet() const;
    void unsetMpsPriority();
    /// <summary>
    /// 
    /// </summary>
    bool isMcsPriority() const;
    void setMcsPriority(bool const value);
    bool mcsPriorityIsSet() const;
    void unsetMcsPriority();
    /// <summary>
    /// 
    /// </summary>
    int32_t getActiveTime() const;
    void setActiveTime(int32_t const value);
    bool activeTimeIsSet() const;
    void unsetActiveTime();
    /// <summary>
    /// 
    /// </summary>
    int32_t getDlPacketCount() const;
    void setDlPacketCount(int32_t const value);
    bool dlPacketCountIsSet() const;
    void unsetDlPacketCount();
    /// <summary>
    /// 
    /// </summary>
    SorInfo getSorInfo() const;
    void setSorInfo(SorInfo const& value);
    bool sorInfoIsSet() const;
    void unsetSorInfo();
    /// <summary>
    /// 
    /// </summary>
    UpuInfo getUpuInfo() const;
    void setUpuInfo(UpuInfo const& value);
    bool upuInfoIsSet() const;
    void unsetUpuInfo();
    /// <summary>
    /// 
    /// </summary>
    bool isMicoAllowed() const;
    void setMicoAllowed(bool const value);
    bool micoAllowedIsSet() const;
    void unsetMicoAllowed();
    /// <summary>
    /// 
    /// </summary>
    std::vector<std::string>& getSharedAmDataIds();
    bool sharedAmDataIdsIsSet() const;
    void unsetSharedAmDataIds();
    /// <summary>
    /// 
    /// </summary>
    OdbPacketServices getOdbPacketServices() const;
    void setOdbPacketServices(OdbPacketServices const& value);
    bool odbPacketServicesIsSet() const;
    void unsetOdbPacketServices();
    /// <summary>
    /// 
    /// </summary>
    std::vector<std::string>& getSubscribedDnnList();
    bool subscribedDnnListIsSet() const;
    void unsetSubscribedDnnList();
    /// <summary>
    /// 
    /// </summary>
    int32_t getServiceGapTime() const;
    void setServiceGapTime(int32_t const value);
    bool serviceGapTimeIsSet() const;
    void unsetServiceGapTime();
    /// <summary>
    /// 
    /// </summary>
    TraceData getTraceData() const;
    void setTraceData(TraceData const& value);
    bool traceDataIsSet() const;
    void unsetTraceData();

    friend void to_json(nlohmann::json& j, const AccessAndMobilitySubscriptionData& o);
    friend void from_json(const nlohmann::json& j, AccessAndMobilitySubscriptionData& o);
protected:
    std::string m_SupportedFeatures;
    bool m_SupportedFeaturesIsSet;
    std::vector<std::string> m_Gpsis;
    bool m_GpsisIsSet;
    std::vector<std::string> m_InternalGroupIds;
    bool m_InternalGroupIdsIsSet;
    AmbrRm m_SubscribedUeAmbr;
    bool m_SubscribedUeAmbrIsSet;
    Nssai m_Nssai;
    bool m_NssaiIsSet;
    std::vector<RatType> m_RatRestrictions;
    bool m_RatRestrictionsIsSet;
    std::vector<Area> m_ForbiddenAreas;
    bool m_ForbiddenAreasIsSet;
    std::vector<CoreNetworkType> m_CoreNetworkTypeRestrictions;
    bool m_CoreNetworkTypeRestrictionsIsSet;
    int32_t m_RfspIndex;
    bool m_RfspIndexIsSet;
    int32_t m_SubsRegTimer;
    bool m_SubsRegTimerIsSet;
    int32_t m_UeUsageType;
    bool m_UeUsageTypeIsSet;
    bool m_MpsPriority;
    bool m_MpsPriorityIsSet;
    bool m_McsPriority;
    bool m_McsPriorityIsSet;
    int32_t m_ActiveTime;
    bool m_ActiveTimeIsSet;
    int32_t m_DlPacketCount;
    bool m_DlPacketCountIsSet;
    SorInfo m_SorInfo;
    bool m_SorInfoIsSet;
    UpuInfo m_UpuInfo;
    bool m_UpuInfoIsSet;
    bool m_MicoAllowed;
    bool m_MicoAllowedIsSet;
    std::vector<std::string> m_SharedAmDataIds;
    bool m_SharedAmDataIdsIsSet;
    OdbPacketServices m_OdbPacketServices;
    bool m_OdbPacketServicesIsSet;
    std::vector<std::string> m_SubscribedDnnList;
    bool m_SubscribedDnnListIsSet;
    int32_t m_ServiceGapTime;
    bool m_ServiceGapTimeIsSet;
    TraceData m_TraceData;
    bool m_TraceDataIsSet;
};

}
}
}

#endif /* AccessAndMobilitySubscriptionData_H_ */
