#pragma once
#include "../../../include/common/ICollector.hpp"
#include "../../../include/log/logging.h"
#include "../../../include/utils/util.h"
#include <atomic>
#include <memory>
#include <thread>
#include <unordered_map>
class ControlManager {
public:
static ControlManager &getInstance();
ControlManager(const ControlManager &) = delete;
ControlManager &operator=(const ControlManager &) = delete;
void register_plugin(std::shared_ptr<ICollector> col);
void start();
void stop();
private:
ControlManager() = default;
~ControlManager();
void uds_worker();
std::string handle_msg(const std::string &raw);
std::unordered_map<std::string, std::shared_ptr<ICollector>> registry_;
std::thread server_thread_;
std::atomic<bool> is_running_{false};
};