/**
 * 将 meta.formFields / meta.fields 转为 editModal 用的列配置（与 tableMixin.generateEditColumns 一致）。
 * 纯函数，便于单测；页面仍通过 mixin 的 this.generateEditColumns 调用。
 *
 * @param {Array<{ key, type, label?, title?, form?, required?, source_key? }>} formFields
 * @param {Record<string, Array<{ key, value }>>} [selectSources]
 * @returns {Array}
 */
export function mapFormFieldsToEditColumns(formFields, selectSources) {
  if (!formFields || !Array.isArray(formFields)) return [];
  const visible = formFields.filter((f) => f && f.form !== false);

  return visible.map((f) => {
    const fieldTitle = f.label || f.title || f.key;
    const col = { key: f.key, title: fieldTitle, required: !!f.required };

    switch (f.type) {
      case 'number':
        if (/_id$/.test(f.key)) {
          col.com = 'Select';
          col.data_type = 'number';
          col.placeholder = '请选择' + fieldTitle;
          col.source = (selectSources && selectSources[f.key]) || [];
        } else {
          col.com = 'InputNumber';
          col.data_type = 'number';
        }
        break;

      case 'select':
        col.com = 'Select';
        // 与后端数字枚举一致时用 number，否则 Option 与 v-model 类型不一致无法显示已选
        col.data_type = f.data_type === 'number' ? 'number' : 'string';
        col.placeholder = '请选择' + fieldTitle;
        col.source = (selectSources && selectSources[f.source_key]) || [];
        break;

      case 'textarea':
        col.com = 'TextArea';
        col.rows = 2;
        break;

      case 'password':
        col.com = 'Input';
        col.type = 'password';
        break;

      case 'bool':
        col.com = 'Switch';
        col.data_type = 'boolean';
        col.required = false;
        break;

      case 'date':
        col.com = 'DatePicker';
        col.data_type = 'date';
        col.type = 'date';
        col.format = 'yyyy-MM-dd';
        col.transfer = true;
        col.placeholder = '请选择' + fieldTitle;
        break;

      case 'datetime':
        col.com = 'DatePicker';
        col.data_type = 'date';
        col.type = 'datetime';
        col.format = 'yyyy-MM-dd HH:mm';
        col.transfer = true;
        col.placeholder = '请选择' + fieldTitle;
        break;

      default:
        col.com = 'Input';
    }

    if (f.disabled) {
      col.disabled = true;
    }

    return col;
  });
}
