#pragma once

#include "types.hpp"

#include <systemd/sd-event.h>

namespace phosphor
{
namespace network
{
namespace rtnetlink
{

constexpr auto BUFSIZE = 4096;

/** General rtnetlink server which waits for the POLLIN event
    and calls the  call back once it gets the event.
    Usage would be create the server with the  call back
    and call the run method.
 */

class Server
{

    public:

        /** @brief Constructor
         *
         *  @param[in] event - Unique ptr reference to sd_event.
         */

        Server(EventPtr& event):
            eventPtr(event) {};

        Server(const Server&) = delete;
        Server& operator=(const Server&) = delete;
        Server(Server&&) = default;
        Server& operator=(Server &&) = default;

        /** @brief Initialise the event loop and add the handler for incoming
         *         RTNETLINK events.
         *
         *  @return EXIT_SUCCESS on success and EXIT_FAILURE on failure.
         */
        int run();

    private:
        /** @brief reference to sd_event wrapped in unique_ptr */
        EventPtr& eventPtr;

};

} //namespace rtnetlink
} //namespce network
} //namespace phosphor
