/**
 * 处理拖拽上传
 */
var fileNumber		= -1; // 上传文件编号
var fileNumberPex	= 'zyFileUpload_'; // 编号前缀
var currUploadfile = {}; // 当前上传的文件对象

var uploadQueue		= []; // 上传队列集合
var isUploading		= false; // 是否正在上传

import config from '../../../config';
/**
 * 松开拖拽文件的处理，进行上传
 */
export function handleDrop(files) {
  if (!('FormData' in window)) {
    return;
  }
  var file = {};
  var errorMsgs = [];
  var len = files.length;
  for (var i = 0; i < len; i++) {
    fileNumber ++;
    file = files[i];
    file.id = fileNumberPex + fileNumber;
    // 检测文件
    let msg = checkFile(file);
    // 文件可以通过
    if (!msg) {
      // 添加上传队列
      uploadQueue.push(file);
      // 在页面进行展示
    //   fileQueued(file, 1);
    } else {
      errorMsgs.push(msg);
    }
  }
  if (errorMsgs.length > 0) {
    // 只选择做一个进行上传
  }
  // 拿出第一个，进行上传
  if (!isUploading && uploadQueue.length > 0) uploadFiles(uploadQueue.shift());
}

function uploadFilesByFetch(file) {
  // 正在上传
  isUploading = true;
  // 设置上传的数据
  var fd = new FormData();
  fd.append('Filename', file.name);
  fd.append('avatar', file);
  fd.append('Upload', 'Submit Query');
  // 设置当前的上传对象
  currUploadfile = file;
  // reqPost('ll',{aa:111},(result)=>{
  //   console.log("result",result)
  // })
  fetch('/upload', {
    method: 'POST',
    // headers: {
    //     'Content-Type': 'application/octet-stream',
    // },
    body: fd,
  }).then((res) => {
    // if (res.status >= 200 && res.status < 300) {
    var reader = res.body.getReader();
    var bytesReceived = 0;
    // read() returns a promise that resolves
    // when a value has been received
    return reader.read().then(function processResult(result) {
      // Result objects contain two properties:
      // done  - true if the stream has already given
      //         you all its data.
      // value - some data. Always undefined when
      //         done is true.
      if (result.done) {
        console.log('done', result);
        nextUpload();
        return;
      }
      // result.value for fetch streams is a Uint8Array
      bytesReceived += result.value.length;
      console.log('Received', bytesReceived, 'bytes of data so far');
      // Read some more, and call this function again
      return reader.read().then(processResult);
    });
    // } else {
    //     return Promise.reject('请求失败！');
    // }
  }).catch(error => {
    console.log(error);
    uploadError();
  });
}
function uploadFiles(fileMsg) {
  let file = fileMsg.file;
  // 正在上传
  isUploading = true;
  // 设置上传的数据
  var fd = new FormData();
  fd.append('Filename', file.name);
  fd.append('avatar', file);
  fd.append('Upload', 'Submit Query');
  // 设置当前的上传对象
  currUploadfile = file;
  var XHR;
  try {
    XHR = new XMLHttpRequest();
  } catch (e) {
    console.log(e);
  }
  if (XHR.readyState > 0) {
    XHR = new XMLHttpRequest();
  }
  // XHR.withCredentials = true;
  // XHR.responseType = "jsonp"
  XHR.upload.addEventListener('progress', (evt) => {
    fileMsg.node && fileMsg.node.upProgress && fileMsg.node.upProgress(evt);
  }, false);
  XHR.upload.addEventListener('', () => {
    XHR.abort();
    uploadError();
    nextUpload();
  }, false);
  XHR.open('POST', './upload');
  // XHR.setRequestHeader("Content-Type","application/octet-stream");
  XHR.send(fd);
  XHR.onreadystatechange = function() {
    // 只要上传完成不管成功失败
    if (XHR.readyState == 4 ) {
      console.log('onreadystatechange', XHR.status, +new Date());
      if (XHR.status == 200) {
        // uploadSuccess(currUploadfile, {}, XHR.status)
        fileMsg.node && fileMsg.node.upFinish && fileMsg.node.upFinish();
      } else {
        fileMsg.node && fileMsg.node.upFail && fileMsg.node.upFail();
      }
      // 进行下一个上传
      nextUpload();
    }
  };
}

function checkFile(file) {
  if (file.size > config.fileLimitSize) {
    return '文件太大，不能超过' + countFileSize(config.fileLimitSize);
  }
  // if (!file.name || !file.name.toLowerCase().match('('+config.fileTypes+')$')) {
  // 	return "文件格式不对";
  // }
  // var len = filesUpload.length;
  // for(var i=0; i< len; i++){
  // 	if(filesUpload[i].name == file.name)	{
  // 		return "文件已经存在";
  // 	}
  // }
  return null;
}

// 请求完成，无论失败或成功
function loadend(evt) {
  console.log('loadend', + new Date(), evt);
}
// 请求开始
function loadstart(evt) {
  console.log('loadstart', evt);
}

// 在请求发送或接收数据期间，在服务器指定的时间间隔触发。
// function progress(evt){
//   // console.log(evt)
// //   uploadProgress(currUploadfile,  evt.loaded || evt.position , evt.total)
// }

// 在请求被取消时触发，例如，在调用 abort() 方法时。
function abort(evt) {
  console.log('abort', evt);
}

// 在请求失败时触发。
function error(evt) {
  // 终止ajax请求
  // eslint-disable-next-line no-undef
  XHR.abort();
  uploadError();
  nextUpload();
}

// 在请求成功完成时触发。
function requestLoad(evt) {
  console.log('requestLoad', +new Date(), evt);
}

// 进行下一个上传
function nextUpload() {
  isUploading = false;
  if (uploadQueue.length > 0) {
    uploadFiles(uploadQueue.shift());
  } else {
    // 米有正在上传的了
    currUploadfile = {};
  }
}

// 上传出错误了，比如断网，
function uploadError() {
  var file = currUploadfile;
  console.log(file);
//   $("#handle_button_"+file.id).replaceWith("<dd>上传失败</dd>")
}


// 对外部注册的函数
var HTML5Funs = {
  /**
   * 取消上传
   * @param string fid文件的Id
   */
  cancelUpload: function(fid) {
    // 如果是正在上传的，AJAX取消
    if (currUploadfile.id == fid) {
      // eslint-disable-next-line no-undef
      XHR.abort();
    } else {
      // 从上传队列中移除
      removeFileFromFilesUpload(uploadQueue, fid);
    }
  }
};

export function removeFileFromFilesUpload(files, fid) {
  var filesUploadKey = -1;
  filesUploadKey = findObjectKey(files, fid);
  // 从全局文件中移除
  if (filesUploadKey > -1)
    files.splice(filesUploadKey, 1);
  return files;
}
function findObjectKey(object, fid) {
  var len = object.length;
  for (var i = 0; i < len; i++) {
    if (object[i].id == fid) {
      return i;
    }
  }
  return -1;
}

// 统计文件大小
export function countFileSize(fileSize) {
  var KB = 1024;
  var MB = 1024 * 1024;
  if (KB >= fileSize) {
    return fileSize + 'B';
  } else if (MB >= fileSize) {
    return (fileSize / KB).toFixed(2) + 'KB';
  } else {
    return (fileSize / MB).toFixed(2) + 'MB';
  }
}

// 如果文件太长进行截取
export function substr_string(name) {
  var len = name.length;
  if (len <= 17 ) return name;
  var lastIndex = name.lastIndexOf('.');
  var suffix = name.substr(lastIndex);
  var pre = name.substr(0, lastIndex);
  var preLen = pre.length;
  var preStart = preLen - 10;
  // 前面10个 + 后面5个
  var fileName = pre.substr(0, 9) + '....' + pre.substr( preStart > 4 ? -4 : -preStart, 4) + suffix;
  return fileName;
}

// 上传成功
function uploadSuccess(file, serverData, res) {
  console.log('success');
}

window.HTML5Funs = HTML5Funs;

