#include "report_types.hpp"

#include "utils/transform.hpp"

ReadingParameters
    toReadingParameters(const std::vector<LabeledMetricParameters>& labeled)
{
    namespace ts = utils::tstring;

    return utils::transform(labeled,
                            [](const LabeledMetricParameters& metricParams) {
        return ReadingParameters::value_type(
            utils::transform(
                metricParams.at_label<ts::SensorPath>(),
                [](const LabeledSensorInfo& sensorParameters) {
            return std::tuple<sdbusplus::message::object_path, std::string>(
                sensorParameters.at_label<ts::Path>(),
                sensorParameters.at_label<ts::Metadata>());
                }),
            utils::enumToString(metricParams.at_label<ts::OperationType>()),
            metricParams.at_label<ts::Id>(),
            utils::enumToString(
                metricParams.at_label<ts::CollectionTimeScope>()),
            metricParams.at_label<ts::CollectionDuration>().t.count());
    });
}
