#include "bios_attribute.hpp"

#include "common/utils.hpp"

using namespace pldm::utils;

namespace pldm
{
namespace responder
{
namespace bios
{

BIOSAttribute::BIOSAttribute(const Json& entry,
                             DBusHandler* const dbusHandler) :
    name(entry.at("attribute_name")), readOnly(false),
    displayName(entry.at("display_name")), helpText(entry.at("help_text")),
    dbusHandler(dbusHandler)
{
    try
    {
        readOnly = entry.at("read_only");
    }
    catch (const std::exception&)
    {
        // No action required, readOnly is initialised to false
    }

    try
    {
        std::string objectPath = entry.at("dbus").at("object_path");
        std::string interface = entry.at("dbus").at("interface");
        std::string propertyName = entry.at("dbus").at("property_name");
        std::string propertyType = entry.at("dbus").at("property_type");

        dBusMap = {objectPath, interface, propertyName, propertyType};
    }
    catch (const std::exception&)
    {
        // No action required, dBusMap will have no value
    }
}

std::optional<DBusMapping> BIOSAttribute::getDBusMap()
{
    return dBusMap;
}

} // namespace bios
} // namespace responder
} // namespace pldm
