#pragma once

#include "xyz/openbmc_project/PLDM/PDR/server.hpp"

#include <libpldm/pdr.h>
#include <libpldm/platform.h>

#include <sdbusplus/bus.hpp>
#include <sdbusplus/server/object.hpp>

#include <vector>

namespace pldm
{
namespace dbus_api
{

using PdrIntf = sdbusplus::server::object_t<
    sdbusplus::xyz::openbmc_project::PLDM::server::PDR>;

/** @class Pdr
 *  @brief OpenBMC PLDM.PDR Implementation
 *  @details A concrete implementation for the
 *  xyz.openbmc_project.PLDM.PDR DBus APIs.
 */
class Pdr : public PdrIntf
{
  public:
    Pdr() = delete;
    Pdr(const Pdr&) = delete;
    Pdr& operator=(const Pdr&) = delete;
    Pdr(Pdr&&) = delete;
    Pdr& operator=(Pdr&&) = delete;
    ~Pdr() override = default;

    /** @brief Constructor to put object onto bus at a dbus path.
     *  @param[in] bus - Bus to attach to.
     *  @param[in] path - Path to attach at.
     *  @param[in] repo - pointer to BMC's primary PDR repo
     */
    Pdr(sdbusplus::bus_t& bus, const std::string& path, const pldm_pdr* repo) :
        PdrIntf(bus, path.c_str()), pdrRepo(repo) {};

    /** @brief Implementation for PdrIntf.FindStateEffecterPDR
     *  @param[in] tid - PLDM terminus ID.
     *  @param[in] entityID - entity that can be associated with PLDM State set.
     *  @param[in] stateSetId - value that identifies PLDM State set.
     */
    std::vector<std::vector<uint8_t>> findStateEffecterPDR(
        uint8_t tid, uint16_t entityID, uint16_t stateSetId) override;

    /** @brief Implementation for PdrIntf.FindStateSensorPDR
     *  @param[in] tid - PLDM terminus ID.
     *  @param[in] entityID - entity that can be associated with PLDM State set.
     *  @param[in] stateSetId - value that identifies PLDM State set.
     */
    std::vector<std::vector<uint8_t>> findStateSensorPDR(
        uint8_t tid, uint16_t entityID, uint16_t stateSetId) override;

  private:
    /** @brief pointer to BMC's primary PDR repo */
    const pldm_pdr* pdrRepo;
};

} // namespace dbus_api
} // namespace pldm
