// ============================================================
// controls/index.ts — Widget 注册表
//
// 职责：
//   1. 定义 WidgetProps 统一接口
//   2. 维护 Qt 控件名 → React 组件的 WIDGET_MAP 映射
//   3. 导出 WidgetType 联合类型供外部使用
//
// 新增控件类型只需两步：
//   ① 在 controls/ 下创建组件文件
//   ② 在 WIDGET_MAP 中加一行
// ============================================================

import type { ComponentType } from 'react';
import type { WidgetProps } from './types';

import { TextInput, LineInput, ComboBox, Checkbox, SpinBox, DoubleSpinBox } from './simple-widgets';
import { ImageInput, VideoInput } from './upload-widgets';
import { ImageListInput, AudioListInput } from './list-upload-widgets';
import { SeedanceContent } from './SeedanceContent';

export type { WidgetProps } from './types';

// ---------- 注册表 ----------

/**
 * Qt 控件名 → React 组件的映射表。
 *
 * 键来自 API param_schema[].ui.widget 字段（原 Python Qt 客户端的组件类名），
 * 值为 useUI/ 下的对应 React 组件。
 */
export const WIDGET_MAP: Record<string, ComponentType<WidgetProps>> = {
   textEdit: TextInput,
   lineEdit: LineInput,
   comboBox: ComboBox,
   checkbox: Checkbox,
   spinBox: SpinBox,
   doubleSpinBox: DoubleSpinBox,
   imageInput: ImageInput,
   imageList: ImageListInput,
   audioList: AudioListInput,
   videoInput: VideoInput,
   seedance2Content: SeedanceContent,
};

/** 已知的 widget 类型字面量联合 */
export type WidgetType = keyof typeof WIDGET_MAP;

/** 未知控件类型的兜底组件（渲染为普通 Input） */
export const FALLBACK_WIDGET: ComponentType<WidgetProps> = LineInput;
