/**
 * 质量组件统一注册入口
 * <p>
 * 设计器、渲染引擎都从这里取组件；新增一个质量组件＝在下面的清单里加一个 definition，
 * 不改动 GrapesJS 集成代码，也不改动设计器页面。
 */
import { headingDefinition } from './base/heading';
import { dividerDefinition } from './base/divider';
import { imageDefinition } from './base/image';
import { spacerDefinition } from './base/spacer';
import { tableDefinition } from './base/table';
import { textDefinition } from './base/text';
import { registerQualityComponents } from './core/registry';
import { reportFooterDefinition } from './header/report-footer';
import { reportHeaderDefinition } from './header/report-header';
import { sampleInfoDefinition } from './header/sample-info';
import { groupedQualityTableDefinition } from './inspection/grouped-quality-table';
import { inspectionItemDefinition } from './inspection/inspection-item';
import { qualityTableDefinition } from './inspection/quality-table';
import { reportResultDefinition } from './result/report-result';

/** 内置组件清单：顺序即左侧面板同一分类内的展示顺序 */
const BUILT_IN_DEFINITIONS = [
  headingDefinition,
  textDefinition,
  imageDefinition,
  dividerDefinition,
  spacerDefinition,
  tableDefinition,
  reportHeaderDefinition,
  reportFooterDefinition,
  sampleInfoDefinition,
  qualityTableDefinition,
  groupedQualityTableDefinition,
  inspectionItemDefinition,
  reportResultDefinition,
];

/** 幂等：重复调用只会用最新定义覆盖注册表 */
export function registerAllQualityComponents(): void {
  registerQualityComponents(BUILT_IN_DEFINITIONS);
}

export { extractRawProps, attributesToProps, propsToAttributes } from './core/serializer';
export { renderReport } from './engine/render';
export { createContext, createEmptyContext, QUALITY_RESULT, QUALITY_RESULT_TEXT } from './engine/context';
export { evaluateReport, validateRule } from './engine/report-evaluator';
export { listAllFunctionNames } from './engine/rule-engine';
export type {
  QualityRuleDefinition,
  QualityRuleScope,
} from './engine/report-evaluator';
export type {
  RenderNode,
  RenderOptions,
  RenderOutcome,
  RenderSchema,
  RenderStyleRule,
} from './engine/render';
export type {
  ReportContext,
  ReportContextItem,
  ReportContextItemGroup,
  ReportContextReport,
  QualityResult,
} from './engine/context';
export { resolvePageMm, PAGE_SIZE_MM } from './engine/page';
export { bindQualityCanvasSync, restoreQualityTraits } from './core/canvas-sync';
export { BINDING_TRAIT_TYPE, registerBindingTraitType } from './core/trait-binding';
export {
  getQualityComponent,
  listQualityComponents,
  listQualityComponentsByCategory,
  registerQualityComponent,
  registerQualityComponents,
} from './core/registry';
export { buildQualityBlock, buildQualityBlocks, buildQualityContent } from './core/factory';
export { resolveQualityProps, validateQualityProps } from './core/validator';
export { buildQualityComponentCatalog } from './core/catalog';
export type {
  QualityCatalogField,
  QualityComponentCatalog,
} from './core/catalog';
export { assembleQualityCanvas } from './core/assembler';
export type {
  QualityAssemblyResult,
  QualityAssemblySkip,
  QualityDraftComponent,
} from './core/assembler';
export { QUALITY_TYPE_ATTR, propAttrName } from './core/attrs';
export type {
  QualityCategory,
  QualityComponentDefinition,
  QualityFieldSchema,
  QualityProps,
} from './core/types';
export { QUALITY_CATEGORY } from './core/types';