import React from "react";
import { AxiosRequestConfig } from "axios";
import {
  SelectProps,
  OptionProps,
  OptGroupProps
} from "antd/lib/select/index.d";

type Options = Array<{ label: any; value: any; [key: string]: any }>;
export interface FetchOptions {
  /** 后端接口地址 */
  url: string;
  /** 处理后端接口响应，返回标准options */
  resMap?: (response: any) => Options;
  /** 处理后端接口响应，返回的options为，res[ resMapKeys[0] ] [ resMapKeys[1] ] ...*/
  resMapKeys?: Array<{ key: string }>;
  /** 其他请求配置 */
  axiosConfig?: AxiosRequestConfig;
  /** 默认选项 */
  defaultOptions?: Options;
}
export interface SuggestOptions {
  /** 后端接口地址 */
  url: string;
  /** 处理后端接口响应，返回标准options */
  resMap?: (response: any) => Options;
  /** 处理后端接口响应，返回的options为，res[ resMapKeys[0] ] [ resMapKeys[1] ] ...*/
  resMapKeys?: Array<{ key: string }>;
  /** 其他请求配置 */
  axiosConfig?: AxiosRequestConfig;
  /** 第一个请求参数的name */
  name: string;
  /** 输入停顿时间，发起请求，默认300ms */
  debounce?: number;
  /** 默认选项 */
  defaultOptions?: Options;
}
export type ISelectProps = SelectProps & {
  /** 一次请求数据生成选项 */
  fetchOptions?: FetchOptions;
  /** 选项 */
  options?: Array<{ label: string; value: any }>;
  /** 实时搜索请求数据生成选项 */
  suggestOptions?: SuggestOptions;
  /** 将options通过Select.Option标签生成选项，用以在Select组件onChange时获取Option上的属性 */
  childrenMode?: boolean;
  /** 与chilrenMode结合使用，自定义选项内容 */
  optionRender?: (opt: any) => React.ReactNode;
};

export default class Select extends React.Component<ISelectProps, any> {
  static Option: React.ClassicComponentClass<OptionProps>;
  static OptGroup: React.ClassicComponentClass<OptGroupProps>;
}
