/**
 * Namf_Communication
 * AMF Communication 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.
 */
/*
 * RegistrationContextContainer.h
 *
 *
 */

#ifndef RegistrationContextContainer_H_
#define RegistrationContextContainer_H_

#include "AllowedNssai.h"
#include "UeContext.h"
#include <string>
#include "UserLocation.h"
#include "ConfiguredSnssai.h"
#include "GlobalRanNodeId.h"
#include "Snssai.h"
#include <vector>
#include "AccessType.h"
#include <nlohmann/json.hpp>

namespace oai {
namespace amf {
namespace model {

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

  void validate();

  /////////////////////////////////////////////
  /// RegistrationContextContainer members

  /// <summary>
  ///
  /// </summary>
  UeContext getUeContext() const;
  void setUeContext(UeContext const& value);
  /// <summary>
  ///
  /// </summary>
  std::string getLocalTimeZone() const;
  void setLocalTimeZone(std::string const& value);
  bool localTimeZoneIsSet() const;
  void unsetLocalTimeZone();
  /// <summary>
  ///
  /// </summary>
  AccessType getAnType() const;
  void setAnType(AccessType const& value);
  /// <summary>
  ///
  /// </summary>
  int32_t getAnN2ApId() const;
  void setAnN2ApId(int32_t const value);
  /// <summary>
  ///
  /// </summary>
  GlobalRanNodeId getRanNodeId() const;
  void setRanNodeId(GlobalRanNodeId const& value);
  /// <summary>
  ///
  /// </summary>
  std::string getInitialAmfName() const;
  void setInitialAmfName(std::string const& value);
  /// <summary>
  ///
  /// </summary>
  UserLocation getUserLocation() const;
  void setUserLocation(UserLocation const& value);
  /// <summary>
  ///
  /// </summary>
  std::string getRrcEstCause() const;
  void setRrcEstCause(std::string const& value);
  bool rrcEstCauseIsSet() const;
  void unsetRrcEstCause();
  /// <summary>
  ///
  /// </summary>
  bool isUeContextRequest() const;
  void setUeContextRequest(bool const value);
  bool ueContextRequestIsSet() const;
  void unsetUeContextRequest();
  /// <summary>
  ///
  /// </summary>
  std::string getAnN2IPv4Addr() const;
  void setAnN2IPv4Addr(std::string const& value);
  bool anN2IPv4AddrIsSet() const;
  void unsetAnN2IPv4Addr();
  /// <summary>
  ///
  /// </summary>
  std::string getAnN2IPv6Addr() const;
  void setAnN2IPv6Addr(std::string const& value);
  bool anN2IPv6AddrIsSet() const;
  void unsetAnN2IPv6Addr();
  /// <summary>
  ///
  /// </summary>
  AllowedNssai getAllowedNssai() const;
  void setAllowedNssai(AllowedNssai const& value);
  bool allowedNssaiIsSet() const;
  void unsetAllowedNssai();
  /// <summary>
  ///
  /// </summary>
  std::vector<ConfiguredSnssai>& getConfiguredNssai();
  bool configuredNssaiIsSet() const;
  void unsetConfiguredNssai();
  /// <summary>
  ///
  /// </summary>
  std::vector<Snssai>& getRejectedNssaiInPlmn();
  bool rejectedNssaiInPlmnIsSet() const;
  void unsetRejectedNssaiInPlmn();
  /// <summary>
  ///
  /// </summary>
  std::vector<Snssai>& getRejectedNssaiInTa();
  bool rejectedNssaiInTaIsSet() const;
  void unsetRejectedNssaiInTa();

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

 protected:
  UeContext m_UeContext;

  std::string m_LocalTimeZone;
  bool m_LocalTimeZoneIsSet;
  AccessType m_AnType;

  int32_t m_AnN2ApId;

  GlobalRanNodeId m_RanNodeId;

  std::string m_InitialAmfName;

  UserLocation m_UserLocation;

  std::string m_RrcEstCause;
  bool m_RrcEstCauseIsSet;
  bool m_UeContextRequest;
  bool m_UeContextRequestIsSet;
  std::string m_AnN2IPv4Addr;
  bool m_AnN2IPv4AddrIsSet;
  std::string m_AnN2IPv6Addr;
  bool m_AnN2IPv6AddrIsSet;
  AllowedNssai m_AllowedNssai;
  bool m_AllowedNssaiIsSet;
  std::vector<ConfiguredSnssai> m_ConfiguredNssai;
  bool m_ConfiguredNssaiIsSet;
  std::vector<Snssai> m_RejectedNssaiInPlmn;
  bool m_RejectedNssaiInPlmnIsSet;
  std::vector<Snssai> m_RejectedNssaiInTa;
  bool m_RejectedNssaiInTaIsSet;
};

}  // namespace model
}  // namespace amf
}  // namespace oai

#endif /* RegistrationContextContainer_H_ */
