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