// package/report/report.js

import { getPointList,getPointInfoAll,getPatrolTemplates,getPatrolTemplate,getTemplates,reportQuest,getPatrolPlan,getStructuresList,getDetail } from "../../utils/getApiUrl";
import {Request} from "../../common";
const moment = require("../../utils/moment");

Page({
    data: {
        sms:'',//设备号
        sList:[],//根据sn号查询的结构物列表
        structListIndex: undefined,//结构物id
        struct:'',//结构物
        pointList:[],//点位列表
        pointIndex:undefined,//点位索引
        list:[],//初始数据
        pointVis:false,//点位输入框的可见性
        formVis:false,//表单项可见性
        handleObj:'',//处理对象
        handleGoal:'',//处理目的
        installLocation:'',//安装位置
        rtuNo:'',//RTU编号
        isPlanState: false,
        structList: [],//结构物列表
        data:[],//巡检计划的数据(包括点位,设备等等)
        patrolTemplate:[],//巡检模板
        templateData:[],//巡检模板总数居
        patrolTemplateIndex:undefined,//巡检模板索引
        itemData: '', // 点位
        address: '', // 当前位置
        imgUrl: getApp().globalData.imgUrl,
        checkItems: [], // 检查项
        inspectContentArr: [], // 巡检内容
        isCommitting: false,
    },
   
    //卡号接收
    onInputChange(e){
        this.setData({
            sms:e.detail,
            sList:[]
        })
        },
        //根据sn号搜索
        searchDetail(){
            const id=this.data.sms
           if(id){
            Request.get(getDetail(id)).then(res => {
                if(res){
                    //结构物
                    if(!res.length){
                        wx.showToast({
                            title: '未查询到相关数据',
                            icon: 'none',
                            duration: 1500
                        })
                        return;
                    }
                    const uniqueResults = res.reduce((acc, item) => {
                        const existingItem = acc.find(project => project.id === item.project.id);
                        if (!existingItem) {
                            acc.push({
                                id: item.project.id,
                                name: item.project.name
                            });
                        }
                        return acc
                    }, [])
                    this.setData({
                        sList:uniqueResults,
                        list:res
                    })
                }
            })
           }
        },
 //点位改变函数
 pointChange(e){
    const that = this
    // that.getPatrolTemplate()
    Request.get(getPatrolTemplates()).then(res=>{
        if(res.rows.length){
            //只需要地灾的相关模板
            const rlst=res.rows?.filter(q=>q.name.includes('地灾'))?.map(item=>{return {
                id:item.id,
                name:item.name
            }})
            that.setData({patrolTemplate:rlst,templateData:res.rows,
                pointIndex:e.detail.value,
                formVis:true,
                inspectContentArr:[],
                patrolTemplateIndex:null
            })
        }
    })
},
 //整理设备和检查项
 getPatrolTemplate(templateId,pointDevices=[]) {
    const that=this
    Request.get(getPatrolTemplate(templateId)).then(res => {
        const checkItems = res.rows[0].checkItems;
        let inspectContentArr = [];
        // 有绑定设备的点位,每个设备都要检查各个检查项
        if (pointDevices.length) {
            pointDevices.forEach(device => {
                inspectContentArr.push({
                    deviceName: device.name,
                    deviceId: device.id,
                    checkItems: checkItems.map(c => ({
                        id: `${device.id}-${c.id}`,
                        name: c.name,
                        isNormal: true,
                        msgInp: null,
                        level: null,
                        imgs: [],
                    }))
                })
            });
        } else {
            inspectContentArr.push({
                checkItems: checkItems.map(c => ({
                    id: c.id,
                    name: c.name,
                    isNormal: true,
                    msgInp: null,
                    level: null,
                    imgs: [],
                }))
            })
        }
        this.setData({
            checkItems,
            inspectContentArr: inspectContentArr,
        })
    })
},
//收集输入框的值
input1Change(e){
    const that = this
    that.setData({handleObj:e.detail})
},
input2Change(e){
    const that = this
    that.setData({handleGoal:e.detail})
},
input3Change(e){
    const that = this
    that.setData({installLocation:e.detail})
},
input4Change(e){
    const that = this
    that.setData({rtuNo:e.detail})
},


   
     // 预览图片
     previewImg: function (e) {
        const { deviceidx, itemidx, index } = e.currentTarget.dataset;
        // 所有图片
        const imgs = this.data.inspectContentArr[deviceidx].checkItems[itemidx].imgs;
        const newImgs = imgs.map(i => this.data.imgUrl + i);
        wx.previewImage({
            // 当前显示图片
            current: newImgs[index],
            // 所有图片
            urls: newImgs
        })
    },
    //结构物改变函数
   structChange(event) {
    const that = this
    const projectId=that.data.sList.find(item=>item.id==that.data?.sList[Number(event.detail.value)].id)?.id
    const query={projectId}
    Request.get(getPointInfoAll(query)).then(res => {
        if(res){
            that.setData({data:res})
        }
    })
    that.setData({
        pointVis:false,
        pointList:[],//选择结构物后先置空先前的点位列表
        formVis:false,
        pointIndex:null,
        inspectContentArr:[]
    })
    const rlst=that.data.list?.filter(item=>item.project.id==projectId)?.map(item=>{
        return {
            id: item.id,
            name: item.name
        }
    })

    that.setData({
        structListIndex:event.detail.value,
        pointList:rlst,
        pointVis:true
    })
    
      
    },
    
    //选择异常或者正常
    handleChangeTwo(e) {
        const { deviceidx, itemidx } = e.currentTarget.dataset;
        let nextInspectContentArr = this.data.inspectContentArr;

        nextInspectContentArr[deviceidx].checkItems[itemidx].isNormal = e.detail;
        if (e.detail) { // 清除异常数据
            nextInspectContentArr[deviceidx].checkItems[itemidx].msgInp = null;
            nextInspectContentArr[deviceidx].checkItems[itemidx].level = null;
            nextInspectContentArr[deviceidx].checkItems[itemidx].imgs = [];
        }
        this.setData({ inspectContentArr: nextInspectContentArr })
    },
    //返回前一页
    bindCancel() {
            wx.navigateBack();
    },
     // 开始巡检录入
     addPatrolRecord: function () {
        const that = this;
        if (that.data.isCommitting) { return }
        let {
            rtuNo,
            installLocation,
            handleGoal,
            handleObj,
            patrolTemplate,
            patrolTemplateIndex,
            structListIndex,
            pointIndex,
            inspectContentArr,
            pointList,
            sList
        } = that.data;
        let alarm = false;
       
        
        if (!patrolTemplateIndex) {
            wx.showToast({
                title: '请选择模板',
                icon: 'none',
                duration: 1500
            })
            return;
        }
        if (!pointIndex) {
            wx.showToast({
                title: '请选择点位',
                icon: 'none',
                duration: 1500
            })
            return;
        }
        
        let reportArr = inspectContentArr.map(d => ({ ...d, alarm:d.checkItems.some(q=>q.isNormal==false)?true:false }))
        for (const d of reportArr[0]?.checkItems) {
            if (d.isNormal === null) {
                wx.showToast({
                    title: '请填写完整',
                    icon: 'none',
                    duration: 1500
                })
                return 
            }
            if ((!d.isNormal) && (!d.level || !d.msgInp)) {
                wx.showToast({
                    title: '异常项必须输入巡查详情和选择严重等级',
                    icon: 'none',
                    duration: 2000
                })
                return 
            }
            if (d.isNormal === false) {
                alarm = true; // 巡检记录异常
            }
        }

        const { id, name, departmentId, deptName } = wx.getStorageSync('userInfo');
        const newData = that.data.data.map((item) => {
            // let pointDevices=[]
            // item.devices.map(child=>{
            //     const {pointDevice,...newItem } = child;
            //     pointDevices.push({device:newItem,deviceId:pointDevice.deviceId}) 
            // })
            // 使用对象的解构赋值去掉 project 和 devices 属性
                const { project, devices, ...newItem } = item;
                // return {...newItem,pointDevices}
                return {...newItem}

          });
        const nextItemData=newData.find(item=>item.id===pointList[pointIndex].id)
        let datas = {
            patrolPlanId: -1,
            pointId: sList[pointIndex].id,
            inspectionTime: moment().format('YYYY-MM-DD HH:mm:ss'),
            points: {
                user: { id, name, department: { id: departmentId, name: deptName } },
                project: sList[structListIndex],
                itemData:nextItemData,
                inspectContent: reportArr,
                aboutDisaster:{ rtuNo,
                    installLocation,
                    handleGoal,
                    handleObj}
            },
            alarm,
            projectId: sList[structListIndex].id
        }
        wx.showLoading({ title: '提交中...' });
        that.setData({ isCommitting: true });
        Request.post(reportQuest(), datas).then(res => {
            wx.hideLoading();
            that.setData({ isCommitting: false });
            wx.showToast({
                title: '提交成功',
                icon: 'success'
            })
            setTimeout(() => {
                that.bindCancel();
            }, 1500)
        })
    },
     //多张图片上传
     uploadImg: function (data, deviceidx, itemidx) {
        wx.showLoading({
            title: '上传中...',
            mask: true,
        })
        let that = this,
            i = data.i ? data.i : 0,
            success = data.success ? data.success : 0,
            fail = data.fail ? data.fail : 0;
        let imgs = that.data.inspectContentArr[deviceidx].checkItems[itemidx].imgs;
        wx.uploadFile({
            url: data.url,
            filePath: data.path[i],
            name: 'file',
            success: (resp) => {
                wx.hideLoading();
                success++;
                let str = JSON.parse(resp.data) // 返回的结果,可能不同项目结果不一样
                str = str.uploaded
                if (imgs.length >= 20) {
                    let nextInspectContentArr = that.data.inspectContentArr;
                    nextInspectContentArr[deviceidx].checkItems[itemidx].imgs = imgs;
                    that.setData({ inspectContentArr: nextInspectContentArr });
                    return false;
                } else {
                    imgs.push(str);
                    let nextInspectContentArr = that.data.inspectContentArr;
                    nextInspectContentArr[deviceidx].checkItems[itemidx].imgs = imgs;
                    that.setData({ inspectContentArr: nextInspectContentArr });
                }
            },
            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, deviceidx, itemidx); // 递归,回调自己
                }
            }
        });
    },
      // 上传图片
      chooseImg: function (e) { // 这里是选取图片的方法
        const { deviceidx, itemidx } = e.currentTarget.dataset;
        const that = this;
        let pics = [];
        const detailPics = that.data.inspectContentArr[deviceidx].checkItems[itemidx].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) {
                const imgs = res.tempFiles;
                for (let i = 0; i < imgs.length; i++) {
                    if (res.tempFiles[i].size > 15728640) {
                        wx.showToast({ title: '图片大于15M,不可上传', icon: 'none' });
                        return;
                    }
                    const fileNameArr = res.tempFiles[i].tempFilePath.split('.');
                    const extension = res.tempFiles[i].tempFilePath.split('.')[fileNameArr.length - 1];
                    if (extension !== 'jpg' && extension !== 'png' && extension !== 'jpeg') {
                        wx.showToast({ title: '只能上传jpg、jpeg、png格式的图片', icon: 'none' });
                        return;
                    }
                    pics.push(imgs[i].tempFilePath)
                }
                that.uploadImg({
                    url: getApp().globalData.webUrl + '_upload/attachments/project', // 图片上传的接口
                    path: pics, // 选取的图片的地址数组
                }, deviceidx, itemidx);
            },
        })
    },
      // 删除图片
      deleteImg: function (e) {
        const { deviceidx, itemidx, index } = e.currentTarget.dataset;
        let imgs = this.data.inspectContentArr[deviceidx].checkItems[itemidx].imgs;
        imgs.splice(index, 1);
        let nextInspectContentArr = this.data.inspectContentArr;
        nextInspectContentArr[deviceidx].checkItems[itemidx].imgs = imgs;
        this.setData({ inspectContentArr: nextInspectContentArr })
    },
     // 巡查详情
     bindInput: function (e) {
        const { deviceidx, itemidx } = e.currentTarget.dataset;
        let nextInspectContentArr = this.data.inspectContentArr;

        nextInspectContentArr[deviceidx].checkItems[itemidx].msgInp = e.detail.value;
        this.setData({ inspectContentArr: nextInspectContentArr })
    },

    handleChangeThree(e) {
        const { deviceidx, itemidx } = e.currentTarget.dataset;
        let nextInspectContentArr = this.data.inspectContentArr;
        nextInspectContentArr[deviceidx].checkItems[itemidx].level = e.detail;
        this.setData({ inspectContentArr: nextInspectContentArr })
    },


    //巡检模板改变
    patrolTemplateChange(e){
        const that=this
            that.getPatrolTemplate(that.data.patrolTemplate[e.detail.value].id)
            that.setData({
                patrolTemplateIndex:e.detail.value
            })
        
      
    },
    bindShowMsg() {
        this.setData({
            select: !this.data.select
        })
    },

    mySelect(e) {
        var name = e.currentTarget.dataset.name
        this.setData({
            tihuoWay: name,
            select: false
        })
    },
    /**
     * 页面的初始数据
     */
    //   data: {

    //   },

    /**
     * 生命周期函数--监听页面加载
     */
    onLoad(options) {
        const that=this
        wx.setNavigationBarTitle({
            title: options.key,
        })
    
       
    },
  
  
    /**
     * 生命周期函数--监听页面初次渲染完成
     */
    onReady() {

    },

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

    },

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

    },

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

    },

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

    },

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

    },

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

    }
})