/**
 * 状态适配器工厂
 */ function _define_property(obj, key, value) {
    if (key in obj) {
        Object.defineProperty(obj, key, {
            value: value,
            enumerable: true,
            configurable: true,
            writable: true
        });
    } else {
        obj[key] = value;
    }
    return obj;
}
import { DefaultAdapter } from "./DefaultAdapter";
/**
 * 适配器工厂
 * 
 * 负责创建和管理状态适配器实例
 */ export class AdapterFactory {
    /**
   * 获取默认适配器
   */ static getDefaultAdapter() {
        if (!this.defaultAdapter) {
            this.defaultAdapter = new DefaultAdapter();
        }
        return this.defaultAdapter;
    }
    /**
   * 创建适配器实例
   * 
   * @param adapterName - 适配器名称，如果不提供则使用默认适配器
   * @returns 适配器实例
   */ static createAdapter(adapterName) {
        if (!adapterName) {
            return this.getDefaultAdapter();
        }
        const factory = this.customAdapters.get(adapterName);
        if (!factory) {
            throw new Error(`Adapter "${adapterName}" not found. Available adapters: ${Array.from(this.customAdapters.keys()).join(', ')}`);
        }
        return factory();
    }
    /**
   * 注册自定义适配器
   * 
   * @param name - 适配器名称
   * @param factory - 适配器工厂函数
   */ static registerAdapter(name, factory) {
        if (this.customAdapters.has(name)) {
            console.warn(`[AdapterFactory] Adapter "${name}" already registered, replacing...`);
        }
        this.customAdapters.set(name, factory);
    }
    /**
   * 注销适配器
   * 
   * @param name - 适配器名称
   */ static unregisterAdapter(name) {
        this.customAdapters.delete(name);
    }
    /**
   * 获取所有已注册的适配器名称
   */ static getRegisteredAdapters() {
        return Array.from(this.customAdapters.keys());
    }
    /**
   * 重置工厂（主要用于测试）
   */ static reset() {
        if (this.defaultAdapter) {
            this.defaultAdapter.destroy();
            this.defaultAdapter = null;
        }
        this.customAdapters.clear();
    }
}
/**
   * 默认适配器实例
   */ _define_property(AdapterFactory, "defaultAdapter", null);
/**
   * 自定义适配器映射
   */ _define_property(AdapterFactory, "customAdapters", new Map());

//# sourceMappingURL=AdapterFactory.js.map