/**
 * 助手可用的业务组件注册表（类 Tambo 生成式 UI）
 * n8n/LLM 返回的 messages 中，type=component 时用 name 在此查找并渲染
 */
import ListTable from '@/components/List/table.vue'
import ChartTemplate from '@/components/ChartTemplate/index.vue'
import FormList from '@/components/Form/list.vue'

/** 组件名 -> 组件定义（供模板 <component :is=""> 使用） */
export const assistantComponentRegistry = {
  table: ListTable,
  chart: ChartTemplate,
  form: FormList
}

/**
 * 各组件在助手场景下的默认 props（只读、无工具栏等）
 * 与后端返回的 props 合并后传给组件
 */
export const assistantComponentDefaults = {
  table: {
    isTools: false,
    showSelect: false,
    showPage: false,
    loading: false,
    itemsPerPage: -1
  },
  chart: {
    height: 300,
    noTitle: false
  },
  form: {}
}

/**
 * 供 n8n/LLM 系统提示词使用的组件说明（用于让 AI 选择组件并生成 props）
 */
export const assistantComponentDescriptions = `
可选组件（仅当需要结构化展示时返回组件信息，否则用 type: "text"）：
- 方式1：返回 type: "component"，并携带 name: "table" | "chart" | "form"，以及 props
- 方式2：返回 type: "table" | "chart" | "form"，并携带 props
- table: 表格。适用：列表、数据对比。props: headers (数组，每项 { text, value }), items (数组，每项为对象，键与 value 对应)
- chart: 图表。适用：趋势、占比、对比。props: title (字符串), option (ECharts option，含 series/xAxis/yAxis 等), height (可选，默认 300)
- form: 表单。适用：收集或展示表单项。props: items (对象，含 options 数组；每项 { key, type, label, value }，type 可为 text/number/textarea/date/switch 等)
  说明：不同业务（创建元数据、数据订单、业务域、数据流程等）的字段各不相同，必须在工作流中按场景生成 props.items.options；前端只负责按协议渲染，不在代码里为各业务写死表单项。
`

/**
 * n8n 返回示例（POST 响应体）。使用此协议时返回 data.messages，否则按原样返回 data.output/data.text 纯文本。
 *
 * @example
 * {
 *   "messages": [
 *     { "type": "text", "text": "根据查询结果展示如下表格：" },
 *     { "type": "component", "name": "table", "props": { "headers": [{ "text": "姓名", "value": "name" }], "items": [{ "name": "张三" }] } }
 *   ]
 * }
 */
