#include "bios_attribute.hpp"

#include "bios_config.hpp"
#include "common/utils.hpp"

#include <iostream>
#include <variant>

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("displayName")),
    helpText(entry.at("helpText")), dbusHandler(dbusHandler)
{
    try
    {
        readOnly = entry.at("readOnly");
    }
    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 whill have no value
    }
}

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

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