import { TAny, TNoopDefine, TPlainObject } from '@flatbiz/utils';
import { ButtonProps, DrawerProps, FormInstance, ModalProps } from 'antd';
import { ReactElement, ReactNode } from 'react';

export type ButtonWrapperProps = Omit<ButtonProps, "onClick" | "color"> & {
	/** 当返回 Promise 时，按钮自动loading */
	onClick?: (e: React.MouseEvent<HTMLElement>) => Promise<TAny> | void;
	/** 重复点击间隙，单位毫秒 默认值：500 */
	debounceDuration?: number;
	/** 基于GLOBAL中elemAclLimits按钮权限列表，控制按钮显示、隐藏 */
	permission?: string;
	/** 是否隐藏按钮 */
	hidden?: boolean;
	/** loading 显示位置，默认值：left */
	loadingPosition?: "left" | "center";
	/** 移除按钮内边距，一般用于 type=link 类型下 */
	removeGap?: boolean;
	color?: string;
};
export type FbaAppDrawerProps = Omit<DrawerProps, "onOk" | "onCancel" | "getContainer" | "footer" | "extra"> & {
	okText?: string | ReactElement;
	cancelText?: string | ReactElement;
	onOk?: (form: FormInstance, e: React.MouseEvent<HTMLElement>) => void | Promise<void>;
	onCancel?: (form: FormInstance, e: React.MouseEvent<HTMLElement>) => void | Promise<void>;
	content: string | ReactElement | ((form: FormInstance, operate: {
		onClose: DrawerProps["onClose"];
	}) => ReactElement);
	okButtonExtraProps?: Omit<ButtonWrapperProps, "onClick" | "children" | "loading">;
	cancelButtonExtraProps?: Omit<ButtonWrapperProps, "onClick" | "children">;
	okHidden?: boolean;
	cancelHidden?: boolean;
	/** 设置操作区域位置 */
	operatePosition?: "header" | "footer";
	/** 右上角自定义内容，如果operatePosition=header，此设置无效 */
	extra?: ReactNode | ((form: FormInstance) => ReactElement);
	/**
	 * ```
	 * 1. 自定义弹框操作区域，通过 operatePosition 配置可以自定义位置
	 * 2. extraData 为外部通过 useDialogModal.rerenderFooter 重新渲染footer携带的数据
	 * ```
	 */
	operateRender?: (form: FormInstance, extraData?: TPlainObject) => ReactElement;
};
export type FbaAppModalProps = Omit<ModalProps, "onOk" | "onCancel" | "getContainer" | "okButtonProps" | "cancelButtonProps" | "footer"> & {
	/**
	 * 内置尺寸，根据比例固定高度、宽度
	 * ```
	 * 1. 如果自定义了width、bodyHeight属性，size中的height、width将对应失效
	 * 2. 不传、传null值可取消内置尺寸
	 * ```
	 */
	size?: "small" | "middle" | "large" | null;
	onOk?: (form: FormInstance, e: React.MouseEvent<HTMLElement>) => void | Promise<void>;
	onCancel?: (form: FormInstance, e: React.MouseEvent<HTMLElement>) => void | Promise<void>;
	onClose?: () => void;
	content: string | ReactElement | ((form: FormInstance, operate: {
		onClose: TNoopDefine;
	}) => ReactElement);
	okHidden?: boolean;
	cancelHidden?: boolean;
	okButtonProps?: Omit<ButtonWrapperProps, "hidden" | "children" | "onClick">;
	cancelButtonProps?: Omit<ButtonWrapperProps, "hidden" | "children" | "onClick">;
	/**
	 * 设置modal body height 为当前窗口height的百分比，例如：30
	 * @deprecated 已失效，可通过size属性设置
	 * ```
	 * 1. 最大值：80
	 * 1. 设置bodyStyle.height 后，bodyHeightPercent失效
	 * ```
	 */
	bodyHeightPercent?: number;
	titleExtra?: ReactElement;
	/**
	 * null则隐藏footer
	 * ```
	 * extraData 为外部通过 useDialogModal.rerenderFooter 重新渲染footer携带的数据
	 * ```
	 */
	footer?: null | ReactElement | ReactElement[] | ((form: FormInstance, extraData?: TPlainObject) => ReactElement);
	/** 内容高度，为styles.body.height快捷配置，优先级低于styles.body.height */
	bodyHeight?: number;
};
export type FbaAppConfirmProps = FbaAppModalProps;
export type FbaAppAlertProps = Omit<FbaAppModalProps, "onOk" | "cancelHidden" | "cancelButtonProps" | "onCancel" | "onClick"> & {
	onClick?: (e: React.MouseEvent<HTMLElement>) => void | Promise<void>;
};
export type FbaAppLoadingProps = {
	className?: string;
	message?: string;
	mask?: boolean;
};
export declare const FbaApp: ((props: {
	children: import("react").ReactNode;
}) => import("react").JSX.Element) & {
	/** 不支持多次弹框，第二个弹框可使用useDialogDrawer2 */
	useDialogDrawer: () => {
		appDialogDrawer: {
			open: (data: FbaAppDrawerProps) => {
				onClose: () => void;
			};
			close: () => void;
			useAppDialogDrawer: () => {
				rerenderFooter: (data?: import("@flatbiz/utils").TPlainObject) => void;
			};
		};
	};
	useDialogDrawer2: () => {
		appDialogDrawer2: {
			open: (data: FbaAppDrawerProps) => {
				onClose: () => void;
			};
			close: () => void;
			useAppDialogDrawer: () => {
				rerenderFooter: (data?: import("@flatbiz/utils").TPlainObject) => void;
			};
		};
	};
	/** 不支持多次弹框，第二个弹框可使用useDialogModal2 */
	useDialogModal: () => {
		appDialogModal: {
			open: (data: FbaAppModalProps) => {
				onClose: () => void;
			};
			close: () => void;
			useAppDialogModal: () => {
				rerenderFooter: (data?: import("@flatbiz/utils").TPlainObject) => void;
			};
		};
	};
	useDialogModal2: () => {
		appDialogModal2: {
			open: (data: FbaAppModalProps) => {
				onClose: () => void;
			};
			close: () => void;
			useAppDialogModal: () => {
				rerenderFooter: (data?: import("@flatbiz/utils").TPlainObject) => void;
			};
		};
	};
	/** 不支持多次弹框 */
	useDialogConfirm: () => {
		appDialogConfirm: {
			open: (data: FbaAppConfirmProps) => {
				onClose: () => void;
			};
			close: () => void;
		};
	};
	/** 不支持多次弹框 */
	useDialogAlert: () => {
		appDialogAlert: {
			open: (data: FbaAppAlertProps) => {
				onClose: () => void;
			};
			close: () => void;
		};
	};
	/** 不支持多次弹框 */
	useDialogLoading: () => {
		appDialogLoading: {
			open: (data?: FbaAppLoadingProps) => {
				onClose: () => void;
			};
			close: () => void;
		};
	};
};

export {};
