#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::object<
    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::bus& 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