/**
 * FieldSystemManager —— 全局字段系统单例容器
 *
 * 管理全局唯一的 FieldRegistry / FieldOrchestrator / FieldStore / FieldRuntime，
 * 消除 AddFieldButton、columnHeaderMenuUtils 等多入口各自创建实例的问题。
 *
 * 初始化时机：首次调用 getFieldSystem() 时惰性创建，
 * 内建字段在此刻通过 createDefaultDrivers() 批量注册。
 *
 * 扩展方式：外部代码（含插件层）在任意时机通过 registerFieldDriver(s) 追加注册，
 * 无需修改 createDefaultDrivers。
 *
 * 生命周期：单例在模块级别存活，页面刷新自动释放。
 * resetFieldSystem() 仅供单测环境清理。
 */
import { FieldRegistry } from '../registry/field-registry';
import { FieldOrchestrator } from '../orchestrator/field-orchestrator';
import { FieldStore } from '../store/field-store';
import { FieldRuntime } from '../runtime/field-runtime';
import { createDefaultDrivers } from '../drivers/create-default-drivers';
/** 模块级单例，惰性初始化 */
let singleton = null;
/**
 * 获取全局唯一的字段系统实例。
 * 首次调用时自动创建各子模块并注册所有默认 driver。
 */
export function getFieldSystem() {
    if (!singleton) {
        const registry = new FieldRegistry();
        registry.registerBatch(createDefaultDrivers());
        const store = new FieldStore();
        const runtime = new FieldRuntime();
        const orchestrator = new FieldOrchestrator(registry, store, runtime);
        singleton = { registry, orchestrator, store, runtime };
    }
    return singleton;
}
/**
 * 批量注册外部 FieldDriver（追加到全局 registry）。
 * 供宿主或插件层在运行时动态扩展字段类型。
 */
export function registerFieldDrivers(drivers) {
    getFieldSystem().registry.registerBatch(drivers);
}
/** 注册单个外部 FieldDriver */
export function registerFieldDriver(driver) {
    getFieldSystem().registry.register(driver);
}
/** 重置字段系统单例（仅用于单元测试环境清理） */
export function resetFieldSystem() {
    singleton = null;
}
