export interface UploaderItem {
  /**
   * 上传文件源路径
   */
  filePath: string;
  /**
   * 上传完成后的文件路径
   */
  uploadedPath?: string;
  /**
   * 文件的大小(B)
   */
  size?: number;
  /**
   * 指示当前文件是否是图片，如果设置为 true，则预览时会调用 ImagePreview 打开，否则会调用 Linking.openURL 预览资源。
   */
  isImage?: boolean;
  /**
   * 在已上传列表中显示的预览图像，为空时使用 filePath
   */
  previewPath?: string;
  /**
   * 当前状态
   */
  state: 'notstart'|'uploading'|'success'|'fail';
  /**
   * 当失败时显示
   */
  message?: string;
  /**
   * 当前上传进度，0-100
   */
  progress?: number;
  /**
   * 取消上传回调
   */
  cancelUpload?: () => void;
}
export interface UploaderAction {
  /**
   * 当前上传条目
   */
  item: UploaderItem;
  /**
   * 当上传进度变化时需要调用
   * @param precent 当前上传百分比，0-100
   */
  onProgress: (precent: number) => void;
  /**
   * 当开始上传时需要调用
   */
  onStart: (message?: string) => void;
  /**
   * 当上传失败时需要调用
   * @param error 当前错误信息，会显示在条目中
   */
  onError: (error: unknown) => void;
  /**
   * 当上传完成时需要调用
   * @param result 上传完成后的结果
   * @param message 上传完成后的消息，会显示在条目中
   */
  onFinish: (result: {
    /**
     * 上传完成后的文件路径
     */
    uploadedUrl: string;
    /**
     * 上传完成后的预览图像路径，为空时不修改
     */
    previewUrl?: string;
  }, message?: string) => void;
}

export function stringUrlToUploaderItem(url: string): UploaderItem {
  return {
    filePath: url,
    uploadedPath: url,
    state: 'success',
  }
}