import type { GetFileFromUrl } from './types';

/**
 * @description 小程序端请求远程文件数据
 * @param {String} url 文件地址
 * @returns arraybuffer格式
 */

// 定义请求成功回调结果的接口
interface RequestSuccessCallbackResult {
  /** 开发者服务器返回的数据 */
  data: string | Record<string, any> | ArrayBuffer;
  /** 开发者服务器返回的 HTTP 状态码 */
  statusCode: number;
  /** 开发者服务器返回的 HTTP Response Header */
  header: Record<string, string>;
  /** 开发者服务器返回的 cookies（需开启 cookie 选项） */
  cookies?: string[];
}

const getFileFromUrl: GetFileFromUrl = (url: string) => new Promise((resolve, reject) => {
  uni.request({
    url,
    method: 'GET',
    responseType: 'arraybuffer',
    success(res: RequestSuccessCallbackResult) {
      if (res.statusCode !== 200) {
        reject(null);
      }
      resolve(res.data);
    },
    fail(err: any) {
      reject(err);
    },
  });
});

export {
  getFileFromUrl,
};
