// package/startInspectiocurPlann/startInspection.js
import {
  addPatrolRecord,
  getPatrolRecord,
  getPatrolPlan
} from "../../utils/getApiUrl";
import {
  Request
} from "../../common";
const moment = require("../../utils/moment");

Page({

  /**
   * 页面的初始数据
   */
  data: {
    scenePointId: null,
    planList: null,
    planListVisible: true,
    dataList: '',
    imgs: [], //上传图片
    imgUrl: getApp().globalData.imgUrl,
    msgInp: '', //巡查详情
    itemData: '', //单条数据
    changeTwo: '', //是否异常
    changeThree: '', //严重等级
    address: '', //当前位置
  },

  onPickerChange(e) {
    const { key } = e.currentTarget.dataset;
    const { value } = e.detail;

    this.setData({
      [`${key}Visible`]: false,
      [`${key}Value`]: value,
      [`${key}Text`]: value.join(' '),
    });

    const curPlan = this.data.planList[e.detail.columns[0].index];
    let points = curPlan.points.map(e => {
      return e.name
    }).join('、')
    this.setData({
      dataList: {
        ...curPlan,
        showUsers: curPlan.users.map(u => u.name).join(),
        showDepts: [...new Set(curPlan?.users?.map(u => u.department.name))].join(),
      },
      points,
      // showModal: true,
      // itemData: curPlan.points.find(p => p.id == this.data.scenePointId)
    })
    let dataList = JSON.stringify(this.data.dataList);
    let itemData = JSON.stringify(curPlan.points.find(p => p.id == this.data.scenePointId));
    wx.navigateTo({ url: `/package/inspectionInput/inspectionInput?dataList=${encodeURIComponent(dataList)}&itemData=${encodeURIComponent(itemData)}` })
    this.getPatrolRecord();
  },

  onPickerCancel(e) {
    const { key } = e.currentTarget.dataset;
    this.setData({
      [`${key}Visible`]: false,
    });
  },

  onPlanListPicker() {
    this.setData({ planListVisible: true });
  },

  handleChangeTwo(e) {
    this.setData({
      changeTwo: e.detail.value
    })
    if (e.detail.value == 'normal') {
      this.setData({
        msgInp: '', //巡查详情
        changeThree: '', //严重等级
        imgs: []
      })
      return;
    }
  },

  handleChangeThree(e) {
    this.setData({
      changeThree: e.detail.value
    })
  },

  showModal(e) {
    let dataList = JSON.stringify(this.data.dataList);
    let itemData = JSON.stringify(e.currentTarget.dataset.itemdata);
    wx.navigateTo({ url: `/package/inspectionInput/inspectionInput?dataList=${encodeURIComponent(dataList)}&itemData=${encodeURIComponent(itemData)}` })
    // this.setData({
    //   showModal: true,
    //   itemData: e.currentTarget.dataset.itemdata
    // })
  },

  bindCancel() {
    this.setData({
      showModal: false,
      itemData: '',
      msgInp: '', //巡查详情
      changeTwo: '', //是否异常
      changeThree: '', //严重等级
      imgs: [],
      address: ''
    })
  },

  // 上传图片
  chooseImg: function (e) { //这里是选取图片的方法
    var that = this;
    var pics = [];
    var detailPics = that.data.imgs;
    if (detailPics.length >= 20) {
      wx.showToast({
        title: '最多选择20张图片上传',
        icon: 'none'
      });
      return;
    }
    wx.chooseMedia({
      count: 20, // 基础库2.25.0前,最多可支持9个文件,2.25.0及以后最多可支持20个文件
      mediaType: ['image'], // 文件类型
      sizeType: ['original', 'compressed'], // original 原图,compressed 压缩图,默认二者都有
      sourceType: ['album', 'camera'], // album 从相册选图,camera 使用相机,默认二者都有
      success: function (res) {
        var imgs = res.tempFiles;
        for (var i = 0; i < imgs.length; i++) {
          if (res.tempFiles[i].size > 15728640) {
            commonJs.showToast('图片大于15M,不可上传');
            return;
          }
          pics.push(imgs[i].tempFilePath)
        }
        that.uploadimg({
          url: getApp().globalData.webUrl + '_upload/attachments/project', //这里是你图片上传的接口
          path: pics, //这里是选取的图片的地址数组
        });
      },
    })
  },
  //多张图片上传
  uploadimg: function (data) {
    wx.showLoading({
      title: '上传中...',
      mask: true,
    })
    var that = this,
      i = data.i ? data.i : 0,
      success = data.success ? data.success : 0,
      fail = data.fail ? data.fail : 0;
    let imgs = that.data.imgs;
    wx.uploadFile({
      url: data.url,
      filePath: data.path[i],
      name: 'file',
      success: (resp) => {
        wx.hideLoading();
        success++;
        var str = JSON.parse(resp.data) //返回的结果,可能不同项目结果不一样
        str = str.uploaded
        console.log(str);
        if (imgs.length >= 20) {
          that.setData({
            imgs: imgs
          });
          return false;
        } else {
          imgs.push(that.data.imgUrl + str);
          that.setData({
            imgs: imgs
          })
        }
      },
      fail: (res) => {
        fail++;
        console.log('fail:' + i + "fail:" + fail);
      },
      complete: () => {
        i++;
        if (i == data.path.length) { //当图片传完时,停止调用     
          console.log('执行完毕');
          console.log('成功:' + success + " 失败:" + fail);
        } else { //若图片还没有传完,则继续调用函数
          data.i = i;
          data.success = success;
          data.fail = fail;
          that.uploadimg(data); //递归,回调自己
        }
      }
    });
  },

  // 删除图片
  deleteImg: function (e) {
    var imgs = this.data.imgs;
    var index = e.currentTarget.dataset.index;
    imgs.splice(index, 1);
    this.setData({
      imgs: imgs
    });
  },
  // 预览图片
  previewImg: function (e) {
    //获取当前图片的下标
    var index = e.currentTarget.dataset.index;
    //所有图片
    var imgs = this.data.imgs;
    wx.previewImage({
      //当前显示图片
      current: imgs[index],
      //所有图片
      urls: imgs
    })
  },

  // 巡查详情
  bindInput: function (e) {
    this.setData({
      msgInp: e.detail.value
    })
  },

  // 开始巡检录入
  addPatrolRecord: function () {
    let that = this;
    let {
      itemData,
      imgs,
      msgInp,
      changeTwo,
      changeThree,
      dataList,
      imgUrl,
      address
    } = that.data;
    let newImgs = imgs.map(i => {
      i = i.replace(imgUrl, '');
      return i;
    })
    if (changeTwo == 'abnormal') {
      if (msgInp == '') {
        wx.showToast({
          title: '请填写巡查详情',
          icon: 'none'
        })
        return;
      }
      if (changeThree == '') {
        wx.showToast({
          title: '请选择严重等级',
          icon: 'none'
        })
        return;
      }
      if (address == '') {
        wx.showToast({
          title: '请获取当前位置',
          icon: 'none'
        })
        return;
      }
      let data = {
        patrolPlanId: dataList.id,
        pointId: itemData.id,
        lastInspectionTime: itemData.lastInspectionTime,
        inspectionTime: moment().format('YYYY-MM-DD HH:mm:ss'),
        points: {
          user: dataList.user,
          project: dataList.project,
          frequency: dataList.frequency,
          itemData: itemData,
          msgInp: msgInp,
          changeThree: changeThree == 'slight' ? '轻微' : changeThree == 'moderate' ? '中度' : '严重',
          imgs: newImgs,
          address: address
        },
        alarm: true
      }
      Request.post(addPatrolRecord(), data).then(res => {
        wx.showToast({
          title: '提交成功',
          icon: 'success'
        })
        that.bindCancel();
        setTimeout(() => {
          that.getPatrolRecord()
        }, 1500)
      })
    } else {
      if (changeTwo == 'normal') {
        if (address == '') {
          wx.showToast({
            title: '请获取当前位置',
            icon: 'none'
          })
          return;
        }
        let data = {
          patrolPlanId: dataList.id,
          pointId: itemData.id,
          lastInspectionTime: itemData.lastInspectionTime,
          inspectionTime: moment().format('YYYY-MM-DD HH:mm:ss'),
          points: {
            user: dataList.user,
            project: dataList.project,
            frequency: dataList.frequency,
            itemData: itemData,
            address: address
          },
          alarm: false
        }
        Request.post(addPatrolRecord(), data).then(res => {
          wx.showToast({
            title: '提交成功',
            icon: 'success'
          })
          that.bindCancel();
          setTimeout(() => {
            that.getPatrolRecord()
          }, 1500)
        })
        return;
      }
      wx.showToast({
        title: '提交信息不全,请检查',
        icon: 'none'
      })
    }
  },

  // 获取巡检记录
  getPatrolRecord: function () {
    let that = this;
    let { dataList } = that.data;
    let pointId = dataList.points.map(i => {
      return i.id;
    })
    wx.showLoading({
      title: '加载中'
    })
    Request.get(getPatrolRecord(dataList.id, 'null', 'null', 'null', pointId,{home:false})).then(res => {
      wx.hideLoading();
      dataList.points.map(e => {
        res.map(i => {
          if (i == null) {
            e.lastInspectionTime = moment().format('YYYY-MM-DD');
            e.inspectionTime = moment().format('YYYY-MM-DD');
          } else {
            e.lastInspectionTime = i.lastInspectionTime ? moment(i.lastInspectionTime).format('YYYY-MM-DD') : '--';
            e.inspectionTime = moment(i.inspectionTime).format('YYYY-MM-DD');
          }
        })
        return e;
      })
      that.setData({
        dataList
      })
    })
  },

  // 解析经纬度
  ToDegrees(val) {
    if (typeof (val) == "undefined" || val == "") {
      return "";
    }
    var i = val.indexOf('.');
    var strDu = i < 0 ? val : val.substring(0, i); //获取度
    var strFen = 0;
    var strMiao = 0;
    if (i > 0) {
      var strFen = "0" + val.substring(i);
      strFen = strFen * 60 + "";
      i = strFen.indexOf('.');
      if (i > 0) {
        strMiao = "0" + strFen.substring(i);
        strFen = strFen.substring(0, i); //获取分
        strMiao = strMiao * 60 + "";
        i = strMiao.indexOf('.');
        strMiao = strMiao.substring(0, i + 4); //取到小数点后面三位
        strMiao = parseFloat(strMiao).toFixed(2); //精确小数点后面两位
      }
    }
    return strDu + "°" + strFen + "′" + strMiao + "″";
  },

  // 获取当前位置
  selfLocation() {
    const that = this
    wx.showLoading({
      title: '定位中',
      mask: true,
    });
    wx.getLocation({
      type: 'wgs84',
      success: (res) => {
        wx.request({
          url: `https://apis.map.qq.com/ws/geocoder/v1/?location=${res.latitude},${res.longitude}&key=${getApp().globalData.key}`,
          success: function (res) {
            wx.hideLoading();
            //根据自己项目需求获取res内容
            that.setData({
              address: res.data.result.address
            })
          }
        })
      },
      fail: (res) => {
        console.log(res)
        wx.hideLoading();
        wx.showToast({
          title: res.errMsg,
          icon: 'none',
          duration: 1000
        });
      }
    });
  },

  // 获取巡检计划
  getPatrolPlan: function (scenePointId) {
    let that = this;
    wx.showLoading({
      title: '加载中',
    })
    const userInfo = wx.getStorageSync('userInfo');
    Request.get(getPatrolPlan(), { userId: userInfo.id }).then(res => {
      wx.hideLoading();
      let pointPlan = res.rows.filter(plan => {
        for (const point of plan.points) {
          if (point.id == scenePointId) {
            return true;
          }
        }
        return false;
      }).map(p => ({
        label: p.name,
        value: p.name,
        ...p
      }))
      if (!pointPlan.length) {
        wx.showModal({
          title: '提示',
          content: '你没有当前点位的巡检权限,请联系管理员进行授权',
          showCancel: false,
          success: function () {
            wx.switchTab({
              url: '/pages/index/index',
            })
          }
        })
      }
      that.setData({
        planList: pointPlan
      })
    })
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    let that = this;
    const scenePointId = options.scene;
    if (scenePointId) { // 扫小程序码进入
      const userInfo = wx.getStorageSync('userInfo');
      if (!userInfo || !userInfo.id) { // 如果没登录,先登录
        wx.showToast({ title: '请先登录' })
        wx.reLaunch({
          url: `/pages/login/login?scene=${scenePointId}`
        });
        return;
      }
      that.setData({
        scenePointId
      })
      that.getPatrolPlan(scenePointId);
    } else { // 正常点击进入
      let data = JSON.parse(decodeURIComponent(options.data));
      let points = data.points.map(e => {
        return e.name
      }).join('、')
      that.setData({
        dataList: { 
          ...data, 
          showUsers: data.users.map(u => u.name).join(),
          showDepts: [...new Set(data?.users?.map(u => u.department.name))].join(),
        },
        points
      })
      that.getPatrolRecord();
    }
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  }
})