/**
 * schemaToForm.js — Schema 驱动的动态表单渲染器
 *
 * 将 componentRegistry 中的 fields 数组转换为
 * Element Plus 表单渲染配置，配合 ConfigPanel 使用。
 *
 * 支持的字段类型：
 *   text      → el-input
 *   textarea  → el-input type=textarea
 *   number    → el-input-number
 *   switch    → el-switch
 *   select    → el-select + el-option
 *   radio     → el-radio-group + el-radio
 *   color     → el-color-picker
 *   image     → 图片单张（URL输入+预览）
 *   image-list → 图片列表（多张增删+拖动排序）
 *   nav-list  → 导航项列表（图标+文字+链接）
 */

import { h } from 'vue'

/**
 * 判断字段是否应该显示（基于 showIf 条件）
 */
export function shouldShowField(field, props) {
  if (!field.showIf) return true
  const { key, eq, neq } = field.showIf
  const value = props[key]
  if (eq !== undefined) return value === eq
  if (neq !== undefined) return value !== neq
  return true
}

/**
 * 获取字段的默认值（基于 type）
 */
export function getFieldDefaultValue(type) {
  const defaults = {
    text: '',
    textarea: '',
    number: 0,
    switch: false,
    select: '',
    radio: '',
    color: '#ffffff',
    image: '',
    'image-list': [],
    'nav-list': [],
    'notice-list': [],
    datetime: ''
  }
  return defaults[type] ?? ''
}

/**
 * 初始化组件的 props：合并默认值与已有值
 */
export function initComponentProps(schema, existingProps = {}) {
  const defaults = JSON.parse(JSON.stringify(schema.defaultProps || {}))
  for (const key of Object.keys(existingProps)) {
    if (key in defaults) {
      defaults[key] = existingProps[key]
    }
  }
  return defaults
}
