#pragma once
#include <map>
#include <memory>

#include "behavior/events/types.hpp"
#include "behavior/events/base/BaseEvent.hpp"


namespace drp::managers {


/**
 * The ReceiveManager class.
 * Handle everything related to receiving messages.
 */
class ReceiveManager {
public:
    explicit ReceiveManager(const std::shared_ptr<Context>& context);

    void run() const;
    [[noreturn]] void loop() const;

private:
    std::shared_ptr<Context> context;
    std::map<event::EventType, std::shared_ptr<event::BaseEvent>> registry;
};


}
