import type { StartOptions } from './types';
import type { InitializationContext } from './initialization';
import { PluginSandbox, type PluginSandboxConfig } from './plugin/PluginSandbox';
import { type PluginEventBus } from './plugin/PluginEventBus';
/**
 * 插件接口
 */
export interface Plugin {
    /**
     * 插件名称
     */
    name: string;
    /**
     * 插件版本
     */
    version?: string;
    /**
     * 插件依赖列表（插件名称数组）
     * 优化：支持插件依赖管理
     */
    dependencies?: string[];
    /**
     * 插件优先级（数字越小优先级越高）
     * 优化：支持插件加载顺序控制
     */
    priority?: number;
    /**
     * 插件沙箱配置（用于权限控制）
     */
    sandbox?: PluginSandboxConfig;
    /**
     * 初始化前钩子
     */
    beforeInit?: (options: Partial<StartOptions>, sandbox: PluginSandbox, eventBus: PluginEventBus) => Promise<void> | void;
    /**
     * 初始化钩子
     */
    init?: (options: Partial<StartOptions>, context: InitializationContext, sandbox: PluginSandbox, eventBus: PluginEventBus) => Promise<void> | void;
    /**
     * 初始化后钩子
     */
    afterInit?: (options: Partial<StartOptions>, context: InitializationContext, sandbox: PluginSandbox, eventBus: PluginEventBus) => Promise<void> | void;
    /**
     * 销毁钩子
     */
    destroy?: () => Promise<void> | void;
}
/**
 * 插件加载选项
 */
export interface PluginLoadOptions {
    /**
     * 插件URL（用于动态加载）
     */
    url?: string;
    /**
     * 插件模块路径（用于动态导入）
     */
    modulePath?: string;
    /**
     * 是否立即初始化
     */
    initialize?: boolean;
    /**
     * 初始化上下文（如果立即初始化）
     */
    initContext?: InitializationContext;
    /**
     * 启动选项（如果立即初始化）
     */
    startOptions?: StartOptions;
}
/**
 * 插件管理器
 *
 * 优化：
 * 1. 支持插件依赖管理
 * 2. 支持插件优先级控制
 * 3. 支持插件生命周期管理
 * 4. 支持插件热插拔（动态加载/卸载）
 */
export declare class PluginManager {
    private plugins;
    private sandboxes;
    private pluginStatus;
    private pluginLoaders;
    /**
     * 注册插件
     *
     * 优化：检查插件依赖是否已注册
     */
    register(plugin: Plugin): void;
    /**
     * 获取插件加载顺序（考虑依赖和优先级）
     *
     * @returns 插件名称数组，按加载顺序排列
     */
    private getLoadOrder;
    /**
     * 注销插件
     */
    unregister(name: string): void;
    /**
     * 动态加载插件（热插拔）
     *
     * @param options - 插件加载选项
     * @returns 加载的插件
     */
    loadPlugin(options: PluginLoadOptions): Promise<Plugin>;
    /**
     * 初始化单个插件
     *
     * @param name - 插件名称
     * @param options - 启动选项
     * @param context - 初始化上下文
     */
    initializePlugin(name: string, options: StartOptions, context: InitializationContext): Promise<void>;
    /**
     * 卸载插件（热插拔）
     *
     * @param name - 插件名称
     * @param force - 是否强制卸载（即使有依赖）
     */
    unloadPlugin(name: string, force?: boolean): Promise<void>;
    /**
     * 检查插件是否可以热加载
     *
     * @param plugin - 插件
     * @returns 是否可以热加载
     */
    canHotLoad(plugin: Plugin): boolean;
    /**
     * 注册插件加载器（用于延迟加载）
     *
     * @param name - 插件名称
     * @param loader - 加载器函数
     */
    registerLoader(name: string, loader: () => Promise<Plugin>): void;
    /**
     * 使用加载器加载插件
     *
     * @param name - 插件名称
     * @param options - 加载选项
     * @returns 加载的插件
     */
    loadPluginByLoader(name: string, options?: Omit<PluginLoadOptions, 'url' | 'modulePath'>): Promise<Plugin>;
    /**
     * 获取插件
     */
    get(name: string): Plugin | undefined;
    /**
     * 获取所有插件
     */
    getAll(): Plugin[];
    /**
     * 执行初始化前钩子
     *
     * 优化：按依赖顺序执行
     */
    executeBeforeInit(options: StartOptions): Promise<void>;
    /**
     * 执行初始化钩子
     *
     * 优化：按依赖顺序执行，并更新插件状态
     */
    executeInit(options: StartOptions, context: InitializationContext): Promise<void>;
    /**
     * 执行初始化后钩子
     *
     * 优化：按依赖顺序执行（逆序，确保依赖插件先执行）
     */
    executeAfterInit(options: StartOptions, context: InitializationContext): Promise<void>;
    /**
     * 获取插件状态
     *
     * @param name - 插件名称
     * @returns 插件状态
     */
    getPluginStatus(name: string): 'registered' | 'initialized' | 'destroyed' | 'loading' | undefined;
    /**
     * 检查插件是否已加载
     *
     * @param name - 插件名称
     * @returns 是否已加载
     */
    isLoaded(name: string): boolean;
    /**
     * 获取已加载的插件列表
     *
     * @returns 插件名称数组
     */
    getLoadedPlugins(): string[];
    /**
     * 获取所有插件状态
     *
     * @returns 插件状态映射
     */
    getAllPluginStatus(): Map<string, 'registered' | 'initialized' | 'destroyed' | 'loading'>;
    /**
     * 获取插件沙箱
     *
     * @param name - 插件名称
     * @returns 插件沙箱或undefined
     */
    getSandbox(name: string): PluginSandbox | undefined;
    /**
     * 获取事件总线
     */
    getEventBus(): PluginEventBus;
    /**
     * 销毁所有插件
     */
    destroyAll(): Promise<void>;
}
/**
 * 默认插件管理器
 */
export declare const pluginManager: PluginManager;
export { PluginSandbox, PluginPermission, type PluginSandboxConfig } from './plugin/PluginSandbox';
export { PluginEventBus, pluginEventBus, type EventListener, type EventMetadata, type EventWrapper, type PluginEventBusConfig, } from './plugin/PluginEventBus';
//# sourceMappingURL=plugin.d.ts.map