/**
 * NRF NFManagement Service
 * NRF NFManagement Service. © 2019, 3GPP Organizational Partners (ARIB, ATIS,
 * CCSA, ETSI, TSDSI, TTA, TTC). All rights reserved.
 *
 * The version of the OpenAPI document: 1.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.
 */
/*
 * NFProfile.h
 *
 *
 */

#ifndef NFProfile_H_
#define NFProfile_H_

//#include "BsfInfo.h"
//#include "PcfInfo.h"
//#include "NrfInfo.h"
//#include "UdmInfo.h"
#include "UpfInfo.h"
//#include "ChfInfo.h"
//#include "SmfInfo.h"
#include <string>
//#include "DefaultNotificationSubscription.h"
#include "Ipv6Addr.h"
#include "NFStatus.h"
//#include "NFService.h"
#include "PlmnId.h"
#include "Snssai.h"
#include <vector>
//#include "AmfInfo.h"
//#include "UdrInfo.h"
//#include "NFType.h"
//#include "Object.h"
#include "PlmnSnssai.h"
//#include "AusfInfo.h"
//#include "NwdafInfo.h"
#include <nlohmann/json.hpp>

namespace oai {
namespace smf_server {
namespace model {

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

  void validate();

  /////////////////////////////////////////////
  /// NFProfile members

  /// <summary>
  ///
  /// </summary>
  std::string getNfInstanceId() const;
  void setNfInstanceId(std::string const& value);
  /// <summary>
  ///
  /// </summary>
  std::string getNfInstanceName() const;
  void setNfInstanceName(std::string const& value);
  bool nfInstanceNameIsSet() const;
  void unsetNfInstanceName();
  /// <summary>
  ///
  /// </summary>
  std::string getNfType() const;
  void setNfType(std::string const& value);
  /// <summary>
  ///
  /// </summary>
  std::string getNfStatus() const;
  void setNfStatus(std::string const& value);
  /// <summary>
  ///
  /// </summary>
  int32_t getHeartBeatTimer() const;
  void setHeartBeatTimer(int32_t const value);
  bool heartBeatTimerIsSet() const;
  void unsetHeartBeatTimer();
  /// <summary>
  ///
  /// </summary>
  std::vector<PlmnId>& getPlmnList();
  void setPlmnList(std::vector<PlmnId> const& value);
  bool plmnListIsSet() const;
  void unsetPlmnList();
  /// <summary>
  ///
  /// </summary>
  std::vector<Snssai> getSNssais() const;
  void setSNssais(std::vector<Snssai> const& value);
  bool sNssaisIsSet() const;
  void unsetSNssais();
  /// <summary>
  ///
  /// </summary>
  std::vector<PlmnSnssai>& getPerPlmnSnssaiList();
  void setPerPlmnSnssaiList(std::vector<PlmnSnssai> const& value);
  bool perPlmnSnssaiListIsSet() const;
  void unsetPerPlmnSnssaiList();
  /// <summary>
  ///
  /// </summary>
  std::vector<std::string>& getNsiList();
  void setNsiList(std::vector<std::string> const& value);
  bool nsiListIsSet() const;
  void unsetNsiList();
  /// <summary>
  ///
  /// </summary>
  std::string getFqdn() const;
  void setFqdn(std::string const& value);
  bool fqdnIsSet() const;
  void unsetFqdn();
  /// <summary>
  ///
  /// </summary>
  std::string getInterPlmnFqdn() const;
  void setInterPlmnFqdn(std::string const& value);
  bool interPlmnFqdnIsSet() const;
  void unsetInterPlmnFqdn();
  /// <summary>
  ///
  /// </summary>
  std::vector<std::string> getIpv4Addresses() const;
  void setIpv4Addresses(std::vector<std::string> const& value);
  bool ipv4AddressesIsSet() const;
  void unsetIpv4Addresses();
  /// <summary>
  ///
  /// </summary>
  std::vector<Ipv6Addr>& getIpv6Addresses();
  void setIpv6Addresses(std::vector<Ipv6Addr> const& value);
  bool ipv6AddressesIsSet() const;
  void unsetIpv6Addresses();
  /// <summary>
  ///
  /// </summary>
  std::vector<PlmnId>& getAllowedPlmns();
  void setAllowedPlmns(std::vector<PlmnId> const& value);
  bool allowedPlmnsIsSet() const;
  void unsetAllowedPlmns();
  /// <summary>
  ///
  /// </summary>
  std::vector<std::string>& getAllowedNfTypes();
  void setAllowedNfTypes(std::vector<std::string> const& value);
  bool allowedNfTypesIsSet() const;
  void unsetAllowedNfTypes();
  /// <summary>
  ///
  /// </summary>
  std::vector<std::string>& getAllowedNfDomains();
  void setAllowedNfDomains(std::vector<std::string> const& value);
  bool allowedNfDomainsIsSet() const;
  void unsetAllowedNfDomains();
  /// <summary>
  ///
  /// </summary>
  std::vector<Snssai>& getAllowedNssais();
  void setAllowedNssais(std::vector<Snssai> const& value);
  bool allowedNssaisIsSet() const;
  void unsetAllowedNssais();
  /// <summary>
  ///
  /// </summary>
  int32_t getPriority() const;
  void setPriority(int32_t const value);
  bool priorityIsSet() const;
  void unsetPriority();
  /// <summary>
  ///
  /// </summary>
  int32_t getCapacity() const;
  void setCapacity(int32_t const value);
  bool capacityIsSet() const;
  void unsetCapacity();
  /// <summary>
  ///
  /// </summary>
  int32_t getLoad() const;
  void setLoad(int32_t const value);
  bool loadIsSet() const;
  void unsetLoad();
  /// <summary>
  ///
  /// </summary>
  std::string getLocality() const;
  void setLocality(std::string const& value);
  bool localityIsSet() const;
  void unsetLocality();
  /// <summary>
  ///
  /// </summary>
  UpfInfo getUpfInfo() const;
  void setUpfInfo(UpfInfo const& value);
  bool upfInfoIsSet() const;
  void unsetUpfInfo();
  /// <summary>
  ///
  /// </summary>
  std::vector<UpfInfo>& getUpfInfoExt();
  void setUpfInfoExt(std::vector<UpfInfo> const& value);
  bool upfInfoExtIsSet() const;
  void unsetUpfInfoExt();

  std::string getRecoveryTime() const;
  void setRecoveryTime(std::string const& value);
  bool recoveryTimeIsSet() const;
  void unsetRecoveryTime();
  /// <summary>
  ///
  /// </summary>
  bool isNfServicePersistence() const;
  void setNfServicePersistence(bool const value);
  bool nfServicePersistenceIsSet() const;
  void unsetNfServicePersistence();
  /// <summary>
  ///
  /// <summary>
  ///
  /// </summary>
  bool isNfProfileChangesSupportInd() const;
  void setNfProfileChangesSupportInd(bool const value);
  bool nfProfileChangesSupportIndIsSet() const;
  void unsetNfProfileChangesSupportInd();
  /// <summary>
  ///
  /// </summary>
  bool isNfProfileChangesInd() const;
  void setNfProfileChangesInd(bool const value);
  bool nfProfileChangesIndIsSet() const;
  void unsetNfProfileChangesInd();
  /// <summary>
  ///
  /// </summary>

  friend void to_json(nlohmann::json& j, const NFProfile& o);
  friend void from_json(const nlohmann::json& j, NFProfile& o);

 protected:
  std::string m_NfInstanceId;

  std::string m_NfInstanceName;
  bool m_NfInstanceNameIsSet;
  std::string m_NfType;

  std::string m_NfStatus;

  int32_t m_HeartBeatTimer;
  bool m_HeartBeatTimerIsSet;
  std::vector<PlmnId> m_PlmnList;
  bool m_PlmnListIsSet;
  std::vector<Snssai> m_SNssais;
  bool m_SNssaisIsSet;
  std::vector<PlmnSnssai> m_PerPlmnSnssaiList;
  bool m_PerPlmnSnssaiListIsSet;
  std::vector<std::string> m_NsiList;
  bool m_NsiListIsSet;
  std::string m_Fqdn;
  bool m_FqdnIsSet;
  std::string m_InterPlmnFqdn;
  bool m_InterPlmnFqdnIsSet;
  std::vector<std::string> m_Ipv4Addresses;
  bool m_Ipv4AddressesIsSet;
  std::vector<Ipv6Addr> m_Ipv6Addresses;
  bool m_Ipv6AddressesIsSet;
  std::vector<PlmnId> m_AllowedPlmns;
  bool m_AllowedPlmnsIsSet;
  std::vector<std::string> m_AllowedNfTypes;
  bool m_AllowedNfTypesIsSet;
  std::vector<std::string> m_AllowedNfDomains;
  bool m_AllowedNfDomainsIsSet;
  std::vector<Snssai> m_AllowedNssais;
  bool m_AllowedNssaisIsSet;
  int32_t m_Capacity;
  bool m_CapacityIsSet;
  int32_t m_Load;
  bool m_LoadIsSet;
  std::string m_Locality;
  bool m_LocalityIsSet;
  int32_t m_Priority;
  bool m_PriorityIsSet;
  UpfInfo m_UpfInfo;
  bool m_UpfInfoIsSet;
  std::vector<UpfInfo> m_UpfInfoExt;
  bool m_UpfInfoExtIsSet;
  std::string m_RecoveryTime;
  bool m_RecoveryTimeIsSet;
  bool m_NfServicePersistence;
  bool m_NfServicePersistenceIsSet;
  bool m_NfProfileChangesSupportInd;
  bool m_NfProfileChangesSupportIndIsSet;
  bool m_NfProfileChangesInd;
  bool m_NfProfileChangesIndIsSet;
};

}  // namespace model
}  // namespace smf_server
}  // namespace oai

#endif /* NFProfile_H_ */
