#include "Spdlogger.h"

#include "spdlog/sinks/stdout_color_sinks.h"
#include "spdlog/sinks/daily_file_sink.h"


//std::shared_ptr<spdlog::logger> Spdlogger::logger_ = spdlog::stdout_color_mt("sys");
//std::shared_ptr<spdlog::logger> Spdlogger::logger = spdlog::daily_logger_mt("daily_logger", "ees.log", 0, 0);

void Spdlogger::init(spdlog::level::level_enum log_level, std::string filename)
{
    if (!filename.empty()) {
        //logger = spdlog::daily_logger_mt("daily_logger", filename, 0, 0);
    }

    std::vector<spdlog::sink_ptr> mySinks;

    bool consoleEnabled = false;
    // 创建控制台接收器
    if (consoleEnabled)
    {
        auto consoleSink = std::make_shared<spdlog::sinks::stdout_color_sink_mt>();
        //consoleSink->set_level(log_level); // 设置控制台日志等级
        //consoleSink->set_pattern("[%T] [%^%l%$] %v"); // 设置日志格式
        mySinks.push_back(consoleSink);
    }

    bool fileEnabled = true;
    if (fileEnabled)
    {
        // 创建文件接收器
        //auto fileSink = std::make_shared<spdlog::sinks::basic_file_sink_mt>("logs/mcs.log", true);
        //fileSink->set_level(spdlog::level::debug); // 设置文件日志等级
        //fileSink->set_pattern("[%T] [%l] %v"); // 设置日志格式

        // 每日文件sink（可选，每天生成新文件）
        auto dailySink = std::make_shared<spdlog::sinks::daily_file_sink_mt>("logs/ess.log", 0, 0);
        //dailySink->set_level(log_level);
        //dailySink->set_pattern("[%Y-%m-%d %H:%M:%S.%e] [%l] %v");

        mySinks.push_back(dailySink);
    }

    // 创建一个多重接收器的 logger
    auto logger = std::make_shared<spdlog::logger>("", mySinks.begin(), mySinks.end());

    // 设置全局 logger
    spdlog::set_default_logger(logger);
    spdlog::set_level(log_level); // 设置全局日志等级为 debug
    spdlog::flush_on(log_level); // 开启日志刷新
}

void Spdlogger::drop()
{
    spdlog::drop_all();
}