import type { FormInstance, FormProps } from "antd/es/form";
import type { ReactElement, ReactNode } from "react";
import type { FormListOption, FormListUniqueProps, FormOption } from "../FormBuilder";
import type { DeepPartial } from "../FormBuilder/FormBuilder";

export type { FormListOption, FormListUniqueProps, FormOption };

/**
 * Search 组件属性
 */
export interface SearchProps<Values = any> extends Omit<FormProps, "form" | "onFinish" | "onReset"> {
  /** 表单配置项数组 */
  options: FormOption<Values>[];
  /** 表单值 */
  values?: DeepPartial<Values>;
  /** 搜索和重置都会触发的回调 */
  onFinish?: (values: Values, type: "submit" | "reset") => void;
  /** 搜索回调 */
  onSubmit?: (values: Values) => void;
  /** 重置回调 */
  onReset?: (values: Values) => void;
  /** 搜索按钮文本，默认"搜索" */
  searchText?: string;
  /** 重置按钮文本，默认"重置" */
  resetText?: string;
  /** 是否显示搜索按钮，默认 true */
  showSearchButton?: boolean;
  /** 是否显示重置按钮，默认 true */
  showResetButton?: boolean;
  /** 额外的底部按钮组 */
  extraButtons?: ReactNode;
  /** 表单实例（通过 Form.useForm() 创建） */
  form: FormInstance<Values>;
}

/**
 * 搜索表单组件
 * 支持自动展开/收起功能，当表单项超过4个时显示展开/收起按钮
 */
type SearchComponent = {
  useForm: typeof import("antd").Form.useForm;
  useWatch: typeof import("antd").Form.useWatch;
} & {
  <Values = any>(props: SearchProps<Values>): ReactElement;
};

declare const Search: SearchComponent;

export default Search;
