/**
 * 定义滑动验证码组件的属性类型
 * 该类型指定了组件可接受的属性及其类型
 */
export type AJCaptchaSliderProps = {
  /** 验证码图片的缩放比例，默认为1 */
  scale?: number;
  /** 组件的大小，可选值有：'default'、'big'、'large' */
  size?: 'default' | 'big' | 'large';
  /** 是否显示验证码组件 */
  show: boolean;
  /** 验证码图片之间的垂直间距 */
  vSpace?: number;
  /** 滑动块的宽度 */
  sliderBlockWidth?: number;
  /** 组件的内边距 */
  padding?: number;
  /** 隐藏验证码组件的回调函数 */
  hide: () => void;
  /** 验证成功时的回调函数，接收一个秘密字符串作为参数 */
  onSuccess: (secret: string) => void;
  /** 自定义验证码图片和滑动条的高度 */
  setSize?: {
    imgWidth: number;
    imgHeight: number;
    barHeight: number;
  };
  /** 验证码组件的标题 */
  title: string;
  /** 滑动验证码滑块上的提示文本 */
  tips?: string;
  /** 刷新验证码按钮上的文本 */
  refreshText?: string;
  /** 获取验证码图片的函数，返回一个Promise，Promise解析为CaptchaRes类型 */
  getPicture?: () => Promise<CaptchaRes>;
  /** 检查验证码的函数，接收CheckCaptchaProps类型的数据，返回一个Promise，Promise解析为CheckCaptchaRes类型 */
  checkCaptcha?: (data: CheckCaptchaProps) => Promise<CheckCaptchaRes>;
};

/**
 * 定义验证码图标组件的属性类型
 * 该类型用于指定组件的验证状态
 */
export type AJCaptchaIconProps = 'right' | 'fail' | 'loading' | 'check';

/**
 * 定义验证码响应类型
 * 该类型用于表示验证码服务返回的数据结构
 */
export type CaptchaRes = {
  /** 用于验证的令牌 */
  token: string;
  /** 用于验证用户身份的密钥 */
  secretKey: string;
  /** 原始图片的Base64编码 */
  originalImageBase64: string;
  /** 滑动验证码图片的Base64编码 */
  jigsawImageBase64: string;
};

/**
 * 定义检查验证码的响应类型
 * 该类型用于表示检查验证码结果的数据结构
 */
export type CheckCaptchaRes = {
  /** 检查是否成功 */
  success: boolean;
  /** 检查结果的描述信息 */
  msg: string;
  /** 验证的令牌 */
  token: string;
};

/**
 * 定义检查验证码所需的参数类型
 * 该类型指定了检查验证码时需要提供的参数
 */
export type CheckCaptchaProps = {
  /** 验证的令牌 */
  token: string;
  /** 验证码类型 */
  captchaType: string;
  /** 用户滑动验证码的位置数据，JSON格式 */
  pointJson: string;
  /** 客户端的唯一标识符 */
  clientUid: string;
  /** 时间戳，用于防止重放攻击 */
  ts: number;
};
