import type { UnitDefInterface } from '@ablogcms/unit-editor/core/types/unit';
import { getUnitDefinitionRegistry, mergeRegistryEntries } from '@ablogcms/plugins/core';
import RichEditorUnitDef from '@features/rich-editor/unit-def';
import CustomUnitDef from './unit-defs/custom';

const coreUnitDefs: Record<string, UnitDefInterface> = {
  'rich-editor': RichEditorUnitDef,
  custom: CustomUnitDef,
};

/**
 * unit-editor / inplace-editor / config-editor の `unitDefs` prop に渡す値を組み立てる。
 *
 * react-19-migration フェーズ3-1a でコア側に切り出した rich-editor ユニット定義、および
 * カスタムユニット（`custom`。組み込みJS再初期化が本体固有の実装に依存するため
 * unit-editor パッケージのコアには置けない）に、プラグインが
 * `ctx.unitEditor.registerUnitDefinition` で登録したユニット定義をマージする
 * （拡張基盤フェーズD: レジストリ統合配線。design.md「レジストリ（機能登録）」節）。
 *
 * 呼び出し側（各 mount 関数）は、この関数をモジュールトップレベルではなく
 * 関数本体（`ACMS.Ready` 経由で呼ばれる時点）で呼ぶこと。プラグイン JS
 * （`<script type="module">`）の登録が完了してから読み出すため（登録タイミング制約）。
 */
export function getUnitDefinitions(): Record<string, UnitDefInterface> {
  return mergeRegistryEntries(coreUnitDefs, getUnitDefinitionRegistry());
}
