#ifndef PLUGIN_H
#define PLUGIN_H

#include <napi.h>
#include <string>
#include <unordered_map>

// 插件基类
class Plugin {
public:
    virtual ~Plugin() = default;
    // 初始化插件
    virtual Napi::Object Init(Napi::Env env, Napi::Object exports) = 0;
    // 获取插件名称
    virtual std::string GetName() const = 0;
};

// 插件管理器（单例）
class PluginManager {
private:
    // 修正：private 成员放在类内，且构造函数声明语法正确
    PluginManager() = default; // 私有构造函数
    std::unordered_map<std::string, Plugin*> plugins; // 插件存储

public:
    // 单例获取方法（修正语法）
    static PluginManager& GetInstance() {
        static PluginManager instance;
        return instance;
    }

    // 注册插件
    void RegisterPlugin(Plugin* plugin) {
        plugins[plugin->GetName()] = plugin;
    }

    // 初始化所有插件
    Napi::Object InitAllPlugins(Napi::Env env, Napi::Object exports) {
        for (auto& pair : plugins) {
            pair.second->Init(env, exports);
        }
        return exports;
    }

    // 禁用拷贝构造和赋值
    PluginManager(const PluginManager&) = delete;
    PluginManager& operator=(const PluginManager&) = delete;
};

#endif // PLUGIN_H