import { HTMLAttributes } from 'react';

/**
 * 短信倒计时组件的属性接口
 *
 * @extends Omit<HTMLAttributes<HTMLDivElement>, 'onClick'> - 继承 div 元素的所有 HTML 属性，但排除 onClick（组件内部处理点击事件）
 */
export interface SmsCountDownProps extends Omit<HTMLAttributes<HTMLDivElement>, "onClick"> {
	/**
	 * 验证码发送请求函数
	 * @returns Promise<void> - 返回 Promise，成功时开始倒计时，失败时恢复初始状态
	 * @description 当用户点击发送按钮时调用此函数，函数执行成功后会自动开始倒计时
	 */
	onSendRequest: () => Promise<void>;
	/**
	 * 倒计时总时长（单位：秒）
	 * @default 60
	 * @description 从开始倒计时到结束的总秒数，例如 60 表示倒计时 60 秒
	 */
	totalTicks?: number;
	/**
	 * 倒计时更新间隔（单位：毫秒）
	 * @default 1000
	 * @description 倒计时数值更新的频率，1000 表示每秒更新一次
	 */
	duration?: number;
	/**
	 * 是否自动开始倒计时
	 * @default false
	 * @description
	 * - true: 组件挂载后自动开始倒计时（不会调用 onSendRequest）
	 * - false: 需要用户点击才会触发发送和倒计时
	 * @note 自动开始时不会调用 onSendRequest，仅用于显示倒计时状态
	 */
	autoStart?: boolean;
	/**
	 * 倒计时文本格式化模板
	 * @default '{t}s'
	 * @description 使用 {t} 作为占位符，会被替换为剩余秒数
	 * @example '{t}s' => '60s', '{t}秒后重试' => '60秒后重试'
	 */
	format?: string;
	/**
	 * 初始状态文案（未发送时显示）
	 * @default '获取验证码'
	 * @description 组件初始状态或倒计时结束后显示的文本
	 */
	sendTxt?: string;
	/**
	 * 倒计时完成后的文案
	 * @default '重新获取'
	 * @description 倒计时结束后显示的文本，提示用户可以重新发送
	 */
	sentTxt?: string;
	/**
	 * 发送中状态文案
	 * @default '发送中...'
	 * @description 点击发送按钮后，等待 onSendRequest 执行完成期间显示的文本
	 */
	processingTxt?: string;
	/**
	 * 倒计时数值变化时的回调函数
	 * @param time - 当前剩余的秒数
	 * @description 每次倒计时更新时都会调用此函数，可用于外部监听倒计时状态
	 */
	onTick?: (time: number) => void;
}
/**
 * 短信倒计时组件的 Ref API 接口
 *
 * @description 通过 ref 可以访问组件内部的方法，用于外部程序化控制组件行为
 */
export type SmsCountDownRefApi = {
	/**
	 * 手动触发发送验证码
	 * @description 调用此方法会触发 onSendRequest 并开始倒计时，等同于用户点击组件
	 */
	onStart: () => void;
};
/**
 * 短信验证码倒计时组件
 *
 * @param props - 组件属性
 * @param ref - 组件引用，用于访问内部方法
 * @returns JSX.Element - 返回可点击的倒计时显示元素
 */
export declare const SmsCountDown: import("react").ForwardRefExoticComponent<SmsCountDownProps & import("react").RefAttributes<SmsCountDownRefApi>>;

export {};
