#pragma once

#include "xyz/openbmc_project/Network/IP/server.hpp"
#include "xyz/openbmc_project/Object/Delete/server.hpp"

#include <sdbusplus/bus.hpp>
#include <sdbusplus/server/object.hpp>

#include <string>

namespace phosphor
{
namespace network
{

using IPIfaces =
    sdbusplus::server::object::object<
        sdbusplus::xyz::openbmc_project::Network::server::IP,
        sdbusplus::xyz::openbmc_project::Object::server::Delete>;

using IP = sdbusplus::xyz::openbmc_project::Network::server::IP;

class EthernetInterface;

/** @class IPAddress
 *  @brief OpenBMC IPAddress implementation.
 *  @details A concrete implementation for the
 *  xyz.openbmc_project.Network.IPProtocol
 *  xyz.openbmc_project.Network.IP Dbus interfaces.
 */
class IPAddress : public IPIfaces
{
    public:
        IPAddress() = delete;
        IPAddress(const IPAddress&) = delete;
        IPAddress& operator=(const IPAddress&) = delete;
        IPAddress(IPAddress&&) = delete;
        IPAddress& operator=(IPAddress &&) = delete;
        virtual ~IPAddress() = default;

        /** @brief Constructor to put object onto bus at a dbus path.
         *  @param[in] bus - Bus to attach to.
         *  @param[in] objPath - Path to attach at.
         *  @param[in] parent - Parent object.
         *  @param[in] type - ipaddress type(v4/v6).
         *  @param[in] ipAddress - ipadress.
         *  @param[in] origin - origin of ipaddress(dhcp/static/SLAAC/LinkLocal).
         *  @param[in] prefixLength - Length of prefix.
         *  @param[in] gateway - gateway address.
         */
        IPAddress(sdbusplus::bus::bus& bus,
                  const char* objPath,
                  EthernetInterface& parent,
                  IP::Protocol type,
                  const std::string& ipAddress,
                  IP::AddressOrigin origin,
                  uint8_t prefixLength,
                  const std::string& gateway);

        /** @brief Delete this d-bus object.
         */
        void delete_() override;

    private:

        /** @brief Parent Object. */
        EthernetInterface& parent;

};

} // namespace network
} // namespace phosphor
