#include "config.h"

#include "bios_attribute.hpp"

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

#include <iostream>
#include <variant>

namespace pldm
{
namespace responder
{
namespace bios
{

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

    if (!readOnly)
    {
        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& e)
        {
            // No action required, dBusMap whill have no value
        }
    }
}

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

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