#pragma once

#include "host-bmc/host_pdr_handler.hpp"

#include <sdbusplus/bus.hpp>
#include <sdbusplus/server/object.hpp>
#include <xyz/openbmc_project/Condition/HostFirmware/server.hpp>

namespace pldm
{
namespace dbus_api
{

using HostIntf = sdbusplus::server::object_t<
    sdbusplus::xyz::openbmc_project::Condition::server::HostFirmware>;

class Host : public HostIntf
{
  public:
    Host() = delete;
    Host(const Host&) = delete;
    Host& operator=(const Host&) = delete;
    Host(Host&&) = delete;
    Host& operator=(Host&&) = delete;
    virtual ~Host() = default;

    Host(sdbusplus::bus_t& bus, const std::string& path) :
        HostIntf(bus, path.c_str()){};

    /** @brief Override reads to CurrentFirmwareCondition */
    FirmwareCondition currentFirmwareCondition() const override;

    /** @brief Store shared pointer to host PDR instance */
    void setHostPdrObj(std::shared_ptr<HostPDRHandler> obj)
    {
        hostPdrObj = obj;
    }

  private:
    std::shared_ptr<HostPDRHandler> hostPdrObj;
};
} // namespace dbus_api
} // namespace pldm
