/**
 * 获取文件名和后缀
 * @param {String} name
 */
export const get_file_ext = (name) => {
  const last_len = name.lastIndexOf('.');
  const len = name.length;
  return {
    name: name.substring(0, last_len),
    ext: name.substring(last_len + 1, len),
  };
};

/**
 * 获取扩展名
 * @param {Array} fileExtname
 */
export const get_extname = (fileExtname) => {
  if (!Array.isArray(fileExtname)) {
    let extname = fileExtname.replace(/(\[|\])/g, '');
    return extname.split(',');
  } else {
    return fileExtname;
  }
  return [];
};

/**
 * 获取文件和检测是否可选
 */
export const get_files_and_is_max = (res, _extname) => {
  let filePaths = [];
  let files = [];
  if (!_extname || _extname.length === 0) {
    return {
      filePaths,
      files,
    };
  }
  res.tempFiles.forEach((v) => {
    let fileFullName = get_file_ext(v.name);
    const extname = fileFullName.ext.toLowerCase();
    if (_extname.indexOf(extname) !== -1) {
      files.push(v);
      filePaths.push(v.path);
    }
  });
  if (files.length !== res.tempFiles.length) {
    uni.showToast({
      title: `当前选择了${res.tempFiles.length}个文件 ,${
        res.tempFiles.length - files.length
      } 个文件格式不正确`,
      icon: 'none',
      duration: 5000,
    });
  }

  return {
    filePaths,
    files,
  };
};

/**
 * 获取图片信息
 * @param {Object} filepath
 */
export const get_file_info = (filepath) => {
  return new Promise((resolve, reject) => {
    uni.getImageInfo({
      src: filepath,
      success(res) {
        resolve(res);
      },
      fail(err) {
        reject(err);
      },
    });
  });
};
/**
 * 获取封装数据
 */
export const get_file_data = async (files, type = 'image') => {
  // 最终需要上传数据库的数据
  let fileFullName = get_file_ext(files.name);
  const extname = fileFullName.ext.toLowerCase();
  let filedata = {
    name: files.name,
    uuid: files.uuid,
    extname: extname || '',
    cloudPath: files.cloudPath,
    fileType: files.fileType,
    url: files.path || files.path,
    size: files.size, //单位是字节
    image: {},
    path: files.path,
    video: {},
  };
  if (type === 'image') {
    const imageinfo = await get_file_info(files.path);
    delete filedata.video;
    filedata.image.width = imageinfo.width;
    filedata.image.height = imageinfo.height;
    filedata.image.location = imageinfo.path;
  } else {
    delete filedata.image;
  }
  return filedata;
};