#include <ipmid/api.hpp>
#include <sdbusplus/asio/connection.hpp>

#include <memory>

namespace
{

std::unique_ptr<sdbusplus::asio::connection> sdbusp;

} // namespace

/**
 * @brief ipmid_get_sdbus_plus_handler is used by some ipmi providers
 *
 * @return: a reference to a unique pointer of the systemd connection
 *          managed by the systemintfcmds code
 */
std::unique_ptr<sdbusplus::asio::connection>& ipmid_get_sdbus_plus_handler()
{
    if (!sdbusp)
    {
        // Create a new sdbus connection so it can have a well-known name
        sd_bus* bus = nullptr;
        sd_bus_open_system(&bus);
        if (bus)
        {
            sdbusp = std::make_unique<sdbusplus::asio::connection>(
                *getIoContext(), bus);
        }
    }
    return sdbusp;
}