#include "snmp_client.hpp"

#include "snmp_conf_manager.hpp"
#include "snmp_serialize.hpp"

namespace phosphor
{
namespace network
{
namespace snmp
{

Client::Client(sdbusplus::bus::bus& bus, const char* objPath,
               ConfManager& parent, const std::string& address, uint16_t port) :
    Ifaces(bus, objPath, true),
    id(std::stol(std::experimental::filesystem::path(objPath).filename())),
    parent(parent)
{
    this->address(address);
    this->port(port);

    // Emit deferred signal.
    emit_object_added();
}

std::string Client::address(std::string value)
{
    if (value == Ifaces::address())
    {
        return value;
    }

    parent.checkClientConfigured(value, port());

    auto addr = Ifaces::address(value);
    serialize(id, *this, parent.dbusPersistentLocation);
    return addr;
}

uint16_t Client::port(uint16_t value)
{
    if (value == Ifaces::port())
    {
        return value;
    }

    parent.checkClientConfigured(address(), value);

    auto port = Ifaces::port(value);
    serialize(id, *this, parent.dbusPersistentLocation);
    return port;
}

void Client::delete_()
{
    parent.deleteSNMPClient(id);
}

} // namespace snmp
} // namespace network
} // namespace phosphor
