#ifndef _ITTI_SBI_MSG_H_
#define _ITTI_SBI_MSG_H_

#include <string>
#include "bstrlib.h"
#include "itti_msg.hpp"
#include "ausf_profile.hpp"
#include "PatchItem.h"

class itti_sbi_msg : public itti_msg {
 public:
  itti_sbi_msg(
      const itti_msg_type_t msg_type, const task_id_t orig,
      const task_id_t dest)
      : itti_msg(msg_type, orig, dest) {}
  itti_sbi_msg(const itti_sbi_msg& i) : itti_msg(i) {}
  itti_sbi_msg(
      const itti_sbi_msg& i, const task_id_t orig, const task_id_t dest)
      : itti_sbi_msg(i) {
    origin      = orig;
    destination = dest;
  }
};

class itti_sbi_register_nf_instance_request : public itti_sbi_msg {
 public:
     itti_sbi_register_nf_instance_request(
         const task_id_t orig, const task_id_t dest)
         : itti_sbi_msg(SBI_REGISTER_NF_INSTANCE_REQUEST, orig, dest),
     http_version(1) {}
     const char *get_msg_name() { return "SBI_REGISTER_NF_INSTANCE_REQUEST"; };

     ausf_application::ausf_profile profile;
     uint8_t http_version;
};
class itti_sbi_register_nf_instance_response : public itti_sbi_msg {
 public:
  itti_sbi_register_nf_instance_response(
      const task_id_t orig, const task_id_t dest)
      : itti_sbi_msg(SBI_REGISTER_NF_INSTANCE_RESPONSE, orig, dest),
        http_version(1) {}
  const char* get_msg_name() { return "SBI_REGISTER_NF_INSTANCE_RESPONSE"; };

  ausf_application::ausf_profile profile;
  uint8_t http_version;
  uint8_t http_response_code;
};
//-----------------------------------------------------------------------------
class itti_sbi_update_nf_instance_request : public itti_sbi_msg {
 public:
  itti_sbi_update_nf_instance_request(
      const task_id_t orig, const task_id_t dest)
      : itti_sbi_msg(SBI_UPDATE_NF_INSTANCE_REQUEST, orig, dest),
        http_version(1) {}
  const char* get_msg_name() { return "SBI_UPDATE_NF_INSTANCE_REQUEST"; };

  std::vector<oai::ausf::model::PatchItem> patch_items;
  uint8_t http_version;
  std::string ausf_instance_id;
};

class itti_sbi_update_nf_instance_response : public itti_sbi_msg {
 public:
  itti_sbi_update_nf_instance_response(
      const task_id_t orig, const task_id_t dest)
      : itti_sbi_msg(SBI_UPDATE_NF_INSTANCE_RESPONSE, orig, dest),
        http_version(1) {}
  const char* get_msg_name() { return "SBI_UPDATE_NF_INSTANCE_RESPONSE"; };

  uint8_t http_version;
  std::string ausf_instance_id;
  uint8_t http_response_code;
};
#endif
