#pragma once

#include "event_entry.hpp"

#include <map>
#include <memory>
#include <queue>
#include <sdbusplus/bus.hpp>

namespace phosphor
{
namespace events
{

/** @class Manager
 *  @brief OpenBMC Event manager implementation.
 */
class Manager
{
  public:
    Manager() = default;
    Manager(const Manager&) = delete;
    Manager& operator=(const Manager&) = delete;
    Manager(Manager&&) = default;
    Manager& operator=(Manager&&) = default;
    virtual ~Manager() = default;

    /** @brief Create the D-Bus Event object.
     *  @detail Add the objectPath,propertyName, propertyValue
     *          as additional data of the event object.
     *  @param[in] eventName - Name of the event.
     *  @param[in] eventMessage - Message for the event.
     *  @param[in] objectPath - Path of the D-Bus object.
     *  @param[in] propertyName - Name of the property.
     *  @param[in] propertyValue - Value of the property.
     */
    void create(const std::string& eventName, const std::string& eventMessage,
                const std::string& objectPath, const std::string& propertyName,
                const std::string& propertyValue);

  private:
    using EventName = std::string;
    /** @brief Queue of events */
    using EventQueue = std::queue<std::unique_ptr<Entry>>;

    using EventMap = std::map<EventName, EventQueue>;
    /** @brief Map of event name  and the list of events **/
    EventMap eventMap;
};

Manager& getManager();

} // namespace events
} // namespace phosphor
