#include <attn/attn_monitor.hpp>

namespace attn
{

/**
 * @brief Attention handler application main()
 */
int attnDaemon(Config* i_config)
{
    int rc = 0;                 // assume success

    gpiod_line* line;           // gpio line to monitor

    boost::asio::io_context io; // async io monitoring service

    // GPIO line configuration (falling edge, active low)
    struct gpiod_line_request_config config{
        "attention", GPIOD_LINE_REQUEST_EVENT_FALLING_EDGE, 0};

    // get handle to attention GPIO line
    line = gpiod_line_find("checkstop");

    if (nullptr == line)
    {
        rc = 1; // error
    }
    else
    {
        // Creating a vector of one gpio to monitor
        std::vector<std::unique_ptr<attn::AttnMonitor>> gpios;
        gpios.push_back(
            std::make_unique<attn::AttnMonitor>(line, config, io, i_config));

        io.run(); // start GPIO monitor

        // done with line, manually close chip (per gpiod api comments)
        gpiod_line_close_chip(line);
    }

    return rc;
}

} // namespace attn
