#pragma once

#include <sdbusplus/server/object.hpp>
#include "xyz/openbmc_project/Dump/Entry/server.hpp"
#include "xyz/openbmc_project/Object/Delete/server.hpp"
#include "xyz/openbmc_project/Time/EpochTime/server.hpp"

namespace phosphor
{
namespace dump
{

template <typename T>
using ServerObject = typename sdbusplus::server::object::object<T>;

using EntryIfaces = sdbusplus::server::object::object<
                    sdbusplus::xyz::openbmc_project::Dump::server::Entry,
                    sdbusplus::xyz::openbmc_project::Object::server::Delete,
                    sdbusplus::xyz::openbmc_project::Time::server::EpochTime>;

/** @class Entry
 *  @brief OpenBMC Dump Entry implementation.
 *  @details A concrete implementation for the
 *  xyz.openbmc_project.Dump.Entry DBus API
 */
class Entry : public EntryIfaces
{
    public:
        Entry() = delete;
        Entry(const Entry&) = delete;
        Entry& operator=(const Entry&) = delete;
        Entry(Entry&&) = delete;
        Entry& operator=(Entry&&) = delete;
        virtual ~Entry() = default;

        /** @brief Constructor for the Dump Entry Object
         *  @param[in] bus - Bus to attach to.
         *  @param[in] obj - Object path to attach to
         */
        Entry(sdbusplus::bus::bus& bus, const char* obj);

        /** @brief Delete this d-bus object.
         */
        void delete_() override ;

};

} // namespace dump
} // namespace phosphor
