import ZModulesCDP from '../../types';

/**
 * api连接参数
 */
interface ApiLinkParams {
  /**
   * 连接名称
   */
  name: string;
  /**
   * url地址
   */
  url: string;
  /**
   * 请求方式
   */
  method: 'get' | 'post';
  /**
   * 头信息
   * headers: {
   *  'Content-Type': 'application/json;charset=UTF-8',
   *  'other': 'xfcxcx'
   * }
   */
  headers: Record<string, string>;
  /**
   * 参数类型
   */
  paramType: 'form-data' | 'x-www-form-urlencoded' | 'json';
  /**
   * url参数
   */
  params: Record<string, any>;
  /**
   * 请求体
   */
  body: Record<string, any>;
  /**
   * pageSize的参数名
   * 参数名定义规范：一级属性名.二级属性名
   * 如果当前属性为数组类型，则拼接数组下标，如：list[0].pageSize
   * 如果当前属性为对象类型，则拼接对象属性名，如：user.pageSize
   * 如果当前属性为基本类型，则直接拼接属性名，如：pageSize
   * 如果当前属性为基本类型数组，则拼接数组下标，如：list[0]
   * 如果当前属性为对象类型数组，则拼接数组下标和对象属性名，如：list[0].user
   */
  pageSizeColumn: string;
  /**
   * pageNumber的参数名
   */
  pageNumberColumn: string;
  /**
   * 响应结构
   */
  resStructure: ApiStructure[];
}

export interface ApiStructure {
  id?: number;
  /**
   * 取值规范
   * 1. 一级属性名.二级属性名
   * 2. 如果当前属性为数组类型，则拼接数组下标，如：list[0].pageSize
   * 3. 如果当前属性为对象类型，则拼接对象属性名，如：user.pageSize
   * 4. 如果当前属性为基本类型，则直接拼接属性名，如：pageSize
   * 5. 如果当前属性为基本类型数组，则拼接数组下标，如：list[0]
   * 6. 要提取的是数组中的所有指定字段数据，则拼接[*]，如：data[*].name
   * 7. 要提取的是数组中某一项数据，则拼接数组下标，如：data[0].name
   */
  rule: string;
  /**
   * 字段类型
   */
  type: ZModulesCDP.WebType | string;
  required: boolean;
}

/**
 * 参数表行数据
 */
export interface ParamTableRow {
  id?: number;
  name: string;
  value: string;
  page: string;
}
