#include <algorithm>
#include "conditions.hpp"
#include "sdbusplus.hpp"

namespace phosphor
{
namespace fan
{
namespace monitor
{
namespace condition
{

Condition propertiesMatch(std::vector<PropertyState>&& propStates)
{
    return [pStates = std::move(propStates)](sdbusplus::bus::bus& bus)
    {
        return std::all_of(
            pStates.begin(),
            pStates.end(),
            [&bus](const auto& p)
        {
            return util::SDBusPlus::getPropertyVariant<PropertyValue>(
                bus,
                std::get<propObj>(p.first),
                std::get<propIface>(p.first),
                std::get<propName>(p.first)) == p.second;
        });
    };
}

} // namespace condition
} // namespace monitor
} // namespace fan
} // namespace phosphor