#include "BoostLog.h"
#include <boost/asio.hpp>
#include <boost/json.hpp>
#include <chrono>
#include <iostream>
#include <thread>

using boost::asio::ip::udp;

int main(int argc, char const *argv[]) {
    boost::log::initialize("/data/sdcard/logs/GatePass", "/data/sdcard/logs");
    LOG(info) << "app start...";
    std::cout << "hello word." << std::endl;

    constexpr auto txt = R"({"cmd":"gate_status","status":1,"personIn":11638,"personOut":5123,"runCount":115370})";

    constexpr auto txt1 = R"({"cmd":"gate_status","status":2,"personIn":-12345,"personOut":-12345,"runCount":115370})";

    constexpr auto error = R"({"cmd":"fault_and_alarm","code":91})";

    constexpr auto error1 = R"({"cmd":"fault_and_alarm","code":96})";

    try {
        // if (argc != 2) {
        //     std::cerr << "Usage: client <host>" << std::endl;
        //     return 1;
        // }

        udp::endpoint point(udp::v4(), 6787);

        boost::asio::io_context io_context;

        udp::socket socket(io_context);
        socket.open(udp::v4());

        socket.send_to(boost::asio::buffer(std::string(txt)), point);
        LOG(info) << "udp send: " << txt;
        std::this_thread::sleep_for(std::chrono::milliseconds(150));
        socket.send_to(boost::asio::buffer(std::string(error)), point);

        std::this_thread::sleep_for(std::chrono::milliseconds(150));
        socket.send_to(boost::asio::buffer(std::string(error1)), point);

        std::this_thread::sleep_for(std::chrono::milliseconds(150));
        socket.send_to(boost::asio::buffer(std::string(txt1)), point);

    } catch (std::exception &e) {
        std::cerr << e.what() << std::endl;
    }

    return 0;

    return 0;
}
