#pragma once
#include <map>
#include <string>
#include <mutex>

struct ModuleComInterface {
    std::string moduleName;
    void* ctx;
    void (*handler)(int code, void* in, void* out, void* ctx);
};

class ModuleComManager {
public:
    bool registerInterface(std::string moduleName, std::string name, void (*handler)(int code, void* in, void* out, void* ctx), void* ctx);
    bool unregisterInterface(std::string name);
    bool interfaceExists(std::string name);
    std::string getModuleName(std::string name);
    bool callInterface(std::string name, int code, void* in, void* out);

private:
    std::recursive_mutex mtx;
    std::map<std::string, ModuleComInterface> interfaces;
};