/**
 * @file PathWatchimpl.hpp
 * @brief Add interfaces added watch for the specified path
 *
 */
#pragma once

#include "callback.hpp"
#include "data_types.hpp"
#include "pathwatch.hpp"

#include <sdbusplus/bus/match.hpp>
#include <sdbusplus/message.hpp>

#include <vector>

namespace phosphor
{
namespace dbus
{
namespace monitoring
{

template <typename DBusInterfaceType>
void PathWatch<DBusInterfaceType>::start()
{
    if (alreadyRan)
    {
        return;
    }
    // Watch for new interfaces added on this path.
    DBusInterfaceType::addMatch(
        sdbusplus::bus::match::rules::interfacesAdded(objectPath),
        [this](auto& msg)
        // *INDENT-OFF*
        { (this->cb)(Context::SIGNAL, msg); });
    // *INDENT-ON*

    alreadyRan = true;
}

template <typename DBusInterfaceType>
void PathWatch<DBusInterfaceType>::callback(Context ctx)
{
    (this->cb)(ctx);
}

template <typename DBusInterfaceType>
void PathWatch<DBusInterfaceType>::callback(Context ctx,
                                            sdbusplus::message::message& msg)
{
    (this->cb)(ctx, msg);
}
} // namespace monitoring
} // namespace dbus
} // namespace phosphor
