import api from '../../api/api.js'

Component({
  /**
   * 组件的属性列表
   */
  properties: {
    source: {
      value: 'media',
      type: String
    },
    bindData: {
      value: {},
      type: Object
    },
    /* 文件夹ID */
    parentid: {
      type: String,
      value: wx.getStorageSync('siteP').appfolderid
    }
  },

  /**
   * 组件的初始数据
   */
  data: {
    originFiles: [],
    filelist: [],
    attachmentids: [],
    gridConfig: {
      column: 5,
      width: 120,
      height: 120,
    },
    config: {
      count: 1,
    },
    timer: null,
    uploadCount: 0
  },
  lifetimes: {
    attached() {
      setTimeout(() => {
        this.fileData()
      }, 1000);

    }
  },
  /**
   * 组件的方法列表
   */
  methods: {
    handleAdd(file) {
      console.log(file)
      let files = file.detail.files.map(e => {
        e.status = 'loading'
        return e
      })
      this.setData({
        uploadCount: files.length,
        originFiles: files,
        attachmentids: []
      })
      this.toSetFileData()
    },
    handleClick() {
      let that = this
      wx.chooseMessageFile({
        count: 10,
        type: 'file',
        success(res) {
          let arr = res.tempFiles.map(e => {
            return {
              name: e.name,
              url: e.path,
              type: e.type,
            }
          })
          that.handleAdd({
            detail: {
              files: arr
            }
          })
        }
      })
    },
    handleRemove(data) {
      console.log(data)
      let file = {
        currentTarget: {
          dataset: {
            item: data.detail.file
          }
        }
      }
      this.deleteFile(file)
    },
    toSetFileData() {

      let files = this.data.originFiles

      for (let i = 0; i < files.length; i++) {
        // 初始化数据
        let that = this,
          data = this.requestType(files[i]);
        data.content.filename = data.content.filename ? data.content.filename : `${Date.now()}.${data.content.filetype}`;
        //发送请求
        wx.getFileSystemManager().readFile({
          filePath: files[i].url,
          success: result => {
            //返回临时文件路径
            const fileData = result.data;
            api._post(data).then(res => {
              if (res.msg == "成功") {
                that.uploadFile(res.data, fileData)
              }
            })
          },
          fail: console.error
        })
      }
      this.data.timer = setInterval(e => {
        if (this.data.uploadCount === 0) {
          clearInterval(this.data.timer)
          this.filebindData()
        }
      })
    },
    /* 请求类型 */
    requestType(file) {
      var index = file.url.lastIndexOf(".");
      var ext = file.url.substr(index + 1);
      //文件名称
      return {
        "classname": "system.attachment.huawei.OBS",
        "method": "getFileName",
        "content": {
          "filename": file.name,
          "filetype": ext,
          "parentid": this.data.parentid
        }
      }
    },
    /* 上传成功反馈 */
    uploadFile(res, data) {
      var that = this;
      wx.request({
        url: res.uploadurl,
        method: "PUT",
        data: data,
        header: {
          'content-type': 'application/octet-stream'
        },
        success(a) {
          api._post({
            "classname": "system.attachment.huawei.OBS",
            "method": "uploadSuccess",
            "content": {
              "serialfilename": res.serialfilename
            }
          }).then(rs => {

            that.setData({
              originFiles: that.data.originFiles.map(e => {
                if (e.name === res.filename) {
                  e.status = ''
                }
                return e
              })
            })

            that.data.attachmentids.push(rs.data.attachmentids[0])

            that.setData({
              uploadCount: that.data.uploadCount - 1
            })
          }).catch(err => {
            console.log(err)
          })
        }
      })
    },
    async filebindData() {

      this.data.bindData.attachmentids = this.data.attachmentids
      const res = await api._post({
        "classname": "system.attachment.Attachment",
        "method": "createFileLink",
        "content": this.data.bindData
      })
      this.fileData()
    },
    async fileData() {
      const res = await api._post({
        "classname": "system.attachment.Attachment",
        "method": "queryFileLink",
        "content": this.data.bindData
      })
      this.setData({
        originFiles: res.data
      })
    },
    async deleteFile(data) {
      let item = data.currentTarget.dataset.item
      const res = await api._post({
        "classname": "system.attachment.Attachment",
        "method": "deleteFileLink",
        "content": {
          "linksids": [item.linksid]
        }
      })
      this.fileData()
    }
  }
})