#include <boost/asio.hpp>
#include <boost/asio/signal_set.hpp>
#include "WebsocketServer.h"
#include "AsyncLogger.h"
#include <boost/asio/ip/tcp.hpp>

using tcp = boost::asio::ip::tcp;

int main() {
    try {
        // 初始化 spdlog 异步日志模块
        logger::init_async_logger();

        spdlog::info("Server start...");

        // 创建一个 io_context 用于信号处理
        boost::asio::io_context io_context;
        // 用于捕获 Ctrl+C (SIGINT) 和 SIGTERM 信号
        boost::asio::signal_set signals(io_context, SIGINT, SIGTERM);

        // 监听地址和端口：127.0.0.1:9000
        tcp::endpoint endpoint(tcp::v4(), 9000);
        WebsocketServer server( endpoint);
        server.start();

        // 异步等待信号，收到信号后停止服务器并退出 io_context
        signals.async_wait(
            [&](const boost::system::error_code& error, int signal_number) {
                if (!error) {
                    spdlog::info("Signal {} received. Stopping server...", signal_number);
                    server.stop();
                    io_context.stop();
                    // **确保在 main 结束前 shutdown 日志系统**
                    logger::shutdown_logger();
                }
            }
        );

        spdlog::info("Server is running. Press Ctrl+C to exit...");
        // 阻塞等待信号到来
        io_context.run();
    }
    catch (const std::exception& ex) {
        spdlog::error("[Main] Exception: {}", ex.what());
    }
    return 0;
}
