#ifndef BIBUNM_ACK_H
#define BIBUNM_ACK_H

#include "bibun_messenging/request.h"

namespace bibunm
{

class Receiver;

namespace internal_objects
{

class Ack : public Request
{
   friend class ::bibunm::Receiver;
public:
   Ack() = delete; // We need a message id to ack...it just doesn't make sense otherwise.
   Ack(std::string message_id);

   Ack(const Ack&) = default;
   Ack(Ack&&) = default;

   const std::string &messageId() const;

   virtual ~Ack();
protected:
   virtual std::map<std::string, std::string> create_protocol_headers() const;

   virtual void handle_protocol_headers(std::map<std::string, std::string> &protocol_headers);
private:
   Ack(std::map<std::string, std::string> &protocol_headers);

   virtual const char *wireName() const final;

   std::string _message_id;
   static const char *_wire_name;
};

}
}

#endif // BIBUNM_ACK_H
