import React from 'react';
import { ModeType } from '../dataSourceForm/type';
/**
 * @title 字段选项接口
 * @description 用于下拉框、单选框等组件的选项配置
 */
export interface DataSourceSubFormOption {
    label?: React.ReactNode;
    value: string | number;
}
/**
 * @title 字段 Schema 接口
 * @description 定义表单字段的结构和配置
 */
export interface DataSourceSubFormFieldSchema {
    /** 字段名称（必填） */
    name: string;
    /** 字段标签 */
    label?: React.ReactNode;
    /** 组件类型（兼容多种命名方式） */
    component?: string;
    componentName?: string;
    /** 字段数据类型 */
    type?: string;
    /** 接口类型，用于映射到具体组件（如 Select、Input 等） */
    interface?: string;
    /** 字段选项列表（用于 Select、Radio 等） */
    options?: DataSourceSubFormOption[];
    /** 组件额外配置 */
    props?: Record<string, any>;
    /** 子字段（用于嵌套结构，如 Input.JSON） */
    children?: DataSourceSubFormFieldSchema[];
    _children?: DataSourceSubFormFieldSchema[];
    /** 字段 Schema 配置 */
    schema?: Record<string, any>;
    /** UI Schema 配置（支持低代码平台的各种配置项） */
    uiSchema?: {
        title?: React.ReactNode;
        enum?: DataSourceSubFormOption[];
        'x-component'?: string;
        'x-component-props'?: Record<string, any>;
        'x-read-pretty'?: boolean;
        'x-validator'?: string;
        'x-display'?: 'visible' | 'hidden' | 'none';
        'x-pattern'?: 'editable' | 'disabled' | 'readPretty';
        'x-data-source'?: {
            type?: string;
            options?: Array<{
                id?: string;
                label: string | Record<string, any>;
                value: string;
                color?: string;
            }>;
            labelField?: string;
            valueField?: string;
            dataSource?: any;
            extraParams?: Record<string, any>;
        };
        'x-record-schema'?: DataSourceSubFormSchema | DataSourceSubFormFieldSchema[] | string;
        default?: any;
        type?: 'string' | 'number' | 'integer' | 'boolean' | 'array' | 'object';
    };
}
/**
 * @title Schema 接口
 * @description 表单字段集合的结构定义
 */
export interface DataSourceSubFormSchema {
    /** 字段列表 */
    fields?: DataSourceSubFormFieldSchema[];
    /** 属性映射（key-value 形式） */
    properties?: Record<string, any>;
    /** 子字段列表 */
    children?: DataSourceSubFormFieldSchema[];
}
/**
 * @title DataSourceSubForm 组件 Props
 * @description
 * 独立的子表单组件，用于渲染一组表单字段。
 * 支持通过 xRecordSchema 配置字段，或直接传入 children 低代码子组件。
 */
export interface DataSourceSubFormProps {
    /** 渲染模式：edit（编辑）、disabled（禁用）、preview（预览） */
    renderMode?: ModeType;
    /**
     * 表单值对象
     * @example { "fieldName1": "value1", "fieldName2": "value2" }
     */
    value?: Record<string, any>;
    /**
     * 值变化回调
     * @param value 更新后的表单值对象
     */
    onChange?: (value: Record<string, any>) => void;
    /**
     * xRecordSchema：定义表单字段结构
     * 支持三种格式：
     * 1. JSON 字符串
     * 2. Schema 对象（包含 fields/properties/children）
     * 3. 字段数组
     */
    xRecordSchema?: string | DataSourceSubFormSchema | DataSourceSubFormFieldSchema[];
    /**
     * 容器 children：低代码引擎渲染的子组件节点
     * 优先使用 children，如果没有则回退到 xRecordSchema 渲染
     */
    children?: React.ReactNode;
    /** 低代码设计模式标识 */
    __designMode?: string;
    /** 表单布局方式 */
    layout?: 'horizontal' | 'vertical' | 'inline';
    /** 自定义类名 */
    className?: string;
    /** 自定义样式 */
    style?: React.CSSProperties;
    [key: string]: any;
}
