// packageC/components/audio-upload/audio-upload.js
var app = getApp();
Component({
  /**
   * 组件的属性列表
   */
  properties: {

  },

  /**
   * 组件的初始数据
   */
  data: {
    show: false,
    time: 0,
    localId: null, //返回音频的本地ID
    recordStop: true,
    timer: null,
    duration: 0, //录音时长
    sec: 0,
    min: 0,
    recorderManager: null
  },
  lifetimes: {
    // 生命周期函数，可以为函数，或一个在methods段中定义的方法名
    attached() {
      this.data.recorderManager = wx.getRecorderManager();
      this.data.recorderManager.onError((res) => {
        console.log(res);
        this.onDurationUpdate('clear');
        app.tips('录音失败！');
      });
      this.data.recorderManager.onStop((res) => {
        if (!this.data.cancelStatus) {
          this.setData({
            recordStop: true,
            src: res.tempFilePath,
            localId: res.tempFilePath
          });
          console.log(res.tempFilePath, '上传的路径');
          app.tips('录音完成！');
          this.upVoice();
        } else {
          app.tips('已取消录音！');
          this.setData({
            recordStop: true,
            show: false,
            duration: 0,
            sec: 0,
            min: 0
          });
        }
        this.data.cancelStatus = false;
        this.onDurationUpdate('clear');
      });
      this.data.recorderManager.onStart((res) => {
        this.setData({
          recordStop: false
        });
        this.onDurationUpdate('updata');
        app.tips('开始录音，不宜超过10分钟');
      });
      this.data.recorderManager.onPause((res) => {
        this.setData({
          recordStop: true
        });
        this.onDurationUpdate('clear');
        app.tips('录音已暂停');
      });
      this.data.recorderManager.onResume((res) => {
        this.setData({
          recordStop: false
        });
        this.onDurationUpdate('updata');
        app.tips('录音继续');
      });
    },
    moved() {},
    detached() {
      if (this.data.timer) this.onDurationUpdate('clear');
    },
  },
  /**
   * 组件的方法列表
   */
  methods: {
    getAudioFile() {
      wx.chooseMessageFile({
        count: 1,
        type: 'file',
        extension: [".mp3", "mp3"],
        success: (res) => {
          this.uploadAudioM(res.tempFiles[0].path);
        },
        fail: (err) => {}
      });
    },
    uploadAudioM(videoData) {
      let urlStr = app.getNetAddresss("upload.uploadPic");
      urlStr += "&upload_type=audio";
      wx.showLoading({
        title: '上传中',
      });
      wx.uploadFile({
        url: urlStr, //仅为示例，非真实的接口地址
        filePath: videoData,
        name: "file",
        formData: {},
        success: (resdata) => {
          let res = JSON.parse(resdata.data);
          this.triggerEvent('uploaderAudio', res.data);
          if (res.result != 1) app.tips(res.msg);
        },
        complete: () => {
          wx.hideLoading();
        }
      });
    },
    openRecord() {
      this.setData({
        show: true
      });
    },
    onDurationUpdate(status) {
      if (status == 'updata') {
        this.data.timer = setInterval(() => {
          if (this.data.duration >= 599) {
            this.stopRecord();
            return;
          }
          this.data.duration += 1;
          this.transformTimes();
        }, 1000);
      } else {
        if (this.data.timer) clearInterval(this.data.timer);
      }
    },

    cancel() {
      this.data.cancelStatus = true;
      this.data.recorderManager.stop();
    },
    stopRecord() {
      this.data.recorderManager.stop();
    },
    startRecord() {
      if (this.data.duration > 0) {
        this.data.recorderManager.resume();
        return;
      }
      this.data.recorderManager.start({
        format: 'mp3'
      });
    },
    pauseRecord() {
      this.data.recorderManager.pause();
    },
    upVoice() {
      let wx_token = wx.getStorageSync('wx_token');
      let urlStr = app.getNetAddresss('upload.uploadPic');
      urlStr += "&upload_type=audio";

      wx.showToast({
        icon: 'loading',
        title: '正在上传'
      }),
      wx.uploadFile({
        url: urlStr,
        filePath: this.data.localId,
        name: 'file',
        header: {
          "Content-Type": "multipart/form-data",
          Cookie: "PHPSESSID=" + wx_token,
        },
        formData: {
          // 和服务器约定的token, 一般也可以放在header中
          '_wx_token': wx.getStorageSync('wx_token')
        },
        success: (res) => {
          var data = JSON.parse(res.data);
          if (data.result == 1) {
            wx.showModal({
              title: '提示',
              content: data.msg,
              showCancel: false
            });
            let _flie = data.data;
            _flie.duration = this.data.duration;
            this.triggerEvent('uploaderAudio', _flie);
            this.setData({
              recordStop: true,
              show: false,
              duration: 0,
              sec: 0,
              min: 0
            });
          } else {
            wx.showModal({
              title: '提示',
              content: data.msg || '错误',
              showCancel: false,
            });
          }
          wx.hideToast();
        },
        fail: function (res) {
          console.log(res);
          wx.showModal({
            title: '提示',
            content: '网络请求失败，请确保网络是否正常',
            showCancel: false,
            success: function (res) {}
          });
        }
      });
    },
    transformTimes() {
      this.data.sec += 1;
      this.setData({
        sec: this.data.sec
      });
      if (this.data.sec >= 60) {
        this.data.min += 1;
        this.setData({
          sec: 0,
          min: this.data.min
        });
      }
    }
  }
});