import {
    complete,
    stopProcess,
    readDeployNotes,
    findCommentByProcInsId
} from '../../../api/flowable'
import {
    findMyDeptList,
    findAllByCategory,
    findProjectApplyData
} from '../../../api/publics'
import {
    updateProjectApply
} from '../../../api/projectApply'
import {
    syncFileUpload
} from '../../../utils/request'
import config from '../../../config'
const app = getApp()
Page({

    /**
     * 页面的初始数据
     */
    data: {
        maxDate: new Date(2088, 1, 1).getTime(),
        deptList: [],
        deployId: "",
        procInsId: "",
        procDefName: "",
        deptName: "",
        nickName: "",
        taskId: "",
        taskName: "",
        category: "",
        projectName: "",
        businessKey: "",
        businessDeptId: "",
        projectParName: "",
        infoData: {},
        active: 100,
        stepList: [],
        rejectNode: false,
        limit: 9,
        imgTypes: ["png", "jpg", "jpeg"],
        fileTypes: ["pdf", "doc", "docx", "xls", "xlsx"],
        fileNames: [],
        minImageList: [],
        detailDataList: [],
        dataList: [],
        stopShow: false,
        stopBtnShow: false,
        activeName: "",
        comment: "",
        useDeptIdIndex: 0,
    },

    /**
     * 生命周期函数--监听页面加载
     */
    onLoad(options) {
        let {
            deployId,
            procInsId,
            procDefName,
            deptName,
            nickName,
            taskId,
            taskName,
            category,
            businessKey,
            projectName,
            businessDeptId,
            projectParName,
            startUserId
        } = options
        this.setData({
            businessKey,
            projectName,
            procInsId,
            procDefName,
            deployId,
            deptName,
            nickName,
            taskId,
            taskName,
            category,
            businessDeptId,
            projectParName,
            initData: {
                id: businessKey,
                text: projectName
            },
            stopShow: startUserId == app.globalData.userData?.userId,
        })
        debugger
        this.initDeptList();
        this.findMyDeptAssetsList();
        this.findFlowNodes();
        this.findCommentByProcInsId();
    },

    //查询部门资产列表信息
    findMyDeptAssetsList() {
        findAllByCategory(this.data.category).then(res => {
            if (res.code == '200') {
                let list = [];
                res.data.forEach(item => {
                    let children = [];
                    item.childrenAssetsTypeList.forEach(child => {
                        children.push({
                            id: child.id,
                            text: child.name,
                            units: child.unit,
                            detailName: item.name + ' > ' + child.name
                        });
                    })
                    list.push({
                        id: item.id,
                        text: item.name,
                        children: children
                    });
                });
                this.findApplyDataInfo();
                this.setData({
                    dataList: list
                })
            }
        });
    },

    /**
     * 初始化部门列表
     */
    initDeptList() {
        findMyDeptList().then(res => {
            let list = [];
            res.data.forEach(item => {
                list.push({
                    "id": item.deptId,
                    "text": item.deptName
                });
            });
            this.setData({
                deptList: list
            })
        });
    },

    //查询工作流节点
    findFlowNodes() {
        readDeployNotes(this.data.deployId).then(res => {
            if (res.code == 200) {
                let list = [{
                    text: '开始'
                }];
                let index = this.data.active;
                res.data.forEach((item, idx) => {
                    if (this.data.taskName == item.name) {
                        index = idx + 1;
                    }
                    list.push({
                        text: item.name,
                        desc: ''
                    });
                });
                list.push({
                    text: '结束'
                });
                this.setData({
                    active: index,
                    stepList: list
                })
            }
        });
    },

    //查询审批日志
    findCommentByProcInsId() {
        findCommentByProcInsId({
            procInsId: this.data.procInsId
        }).then(res => {
            this.setData({
                flowRecordList: res.data
            })
            let list = [];
            res.data.forEach((item, idx) => {
                if (idx == 1 && (item.commentType == "3" || item.commentType == "2")) {
                    this.setData({
                        rejectNode: true
                    })
                }
                if (item.deleteReason) {
                    item.deleteReason = this.getDeleteReason(item.deleteReason);
                }
                if (item.duration) {
                    item.duration = app.getDurationDate(item.duration);
                }
                list.push(item);
            })
            this.setData({
                flowRecordList: list
            })
        });
    },

    //查询审批表单参数
    findApplyDataInfo() {
        findProjectApplyData(this.data.businessKey).then(res => {
            let imgList = [];
            let fileNames = [];
            if (res.data.applyFiles) {
                res.data.applyFiles.split(',').forEach(files => {
                    if(files){
                        let fileType = files.split(".")[files.split(".").length - 1].toLowerCase();
                        if (this.data.imgTypes.indexOf(fileType) == -1) {
                            let it = files.split('/');
                            fileNames.push({
                                name: it[it.length - 1],
                                path: files
                            });
                        } else {
                            imgList.push(config.baseUrl + files + '.min.jpg');
                        }
                    }
                });
            }
            if (res.data.proProjectApplyDetailList.length > 0) {
                let data = [];
                res.data.proProjectApplyDetailList.forEach(item => {
                    let activeId = [];
                    activeId.push(item.typeId);
                    let mainActiveIndex = 0;
                    let useUnitIndex = 0;
                    let assetsUnits = [];
                    this.data.dataList.forEach((_it, _itIndex) => {
                        if (_it.id == item.typeId) {
                            mainActiveIndex = _itIndex;
                            _it.children.forEach((_children, _childrenIndex) => {
                                if (_children.id == item.assetsId && _children.units) {
                                    let unitList = _children.units.split(',');
                                    if (unitList.length > 0) {
                                        unitList.forEach((unit, idx) => {
                                            if (unit == item.assetsUnit) {
                                                useUnitIndex = idx;
                                            }
                                            assetsUnits.push({
                                                id: idx,
                                                text: unit
                                            });
                                        });
                                    }
                                }
                            });
                        }
                    });
                    data.push({
                        detailId: item.assetsId,
                        detailName: item.assetsName,
                        showDetailsName: item.typeName + ' > ' + item.assetsName,
                        showDetailsPopup: false,
                        mainActiveIndex: mainActiveIndex,
                        activeId: activeId,
                        useUnit: item.assetsUnit,
                        assetsUnits: assetsUnits,
                        useUnitIndex: useUnitIndex,
                        applyNumber: item.number,
                        assetsVersion: item.assetsVersion,
                        useReason: item.useReason
                    })
                });
                this.setData({
                    detailDataList: data
                })
            }
            this.setData({
                infoData: res.data,
                fileNames: fileNames,
                minImageList: imgList,
            })
        })
    },

    /**
     * 获取驳回节点
     * @param {*} val 
     */
    getDeleteReason(val) {
        val = val.replace("Change activity to ", "");
        let flowRecordList = this.data.flowRecordList;
        for (let i = 0; i < flowRecordList.length; i++) {
            if (flowRecordList[i].taskDefKey == val) {
                return "驳回至" + flowRecordList[i].taskName;
            }
        }
    },

    //保存申请
    onSaveApply() {
        let {
            procInsId,
            initData,
            infoData,
            detailDataList,
            fileNames,
            minImageList
        } = this.data;
        //数据效验
        if (!procInsId || !initData.id) {
            app.toast("数据异常，请刷新页面重试!")
            return false;
        }
        if (!infoData.deptId) {
            app.toast("请选择使用单位!")
            return false;
        }
        if (!infoData.useTime) {
            app.toast("请选择使用时间!")
            return false;
        }
        if (!infoData.applyReason) {
            app.toast("请填写申请原因!")
            return false;
        }
        if (detailDataList.length > 0) {
            for (let i = 0; i < detailDataList.length; i++) {
                if (!detailDataList[i].detailId || !detailDataList[i].detailName || detailDataList[i].activeId.length == 0) {
                    app.toast("请选择申请明细!")
                    return false;
                }
                if (!detailDataList[i].applyNumber) {
                    app.toast("请填写申请数量!")
                    return false;
                }
                if (!detailDataList[i].useUnit) {
                    app.toast("请选择单位名称!")
                    return false;
                }
            }
        } else {
            app.toast("请添加申请明细!")
        }
        if (fileNames.length > 0) {
            for (let i = 0; i < fileNames.length; i++) {
                if(fileNames[0]){
                    let _fileType = fileNames[0].path.split('.');
                    _fileType = _fileType[_fileType.length - 1].toLowerCase();
                    if (this.data.fileTypes.indexOf(_fileType) == -1) {
                        app.toast("申请附件不支持 [ " + _fileType + " ] 格式！请检查第" + (i + 1) + "个附件")
                        return false;
                    }
                }
            }
        }
        let that = this;
        wx.showModal({
            title: '提示',
            content: '是否确定提交流程申请？',
            success: function (sm) {
                if (sm.confirm) {
                    that.submitBefore();
                } else if (sm.cancel) {
                    console.log('用户点击取消');
                }
            }
        })
    },

    /**
     * 提交前数据准备
     */
    submitBefore() {
        let {
            fileNames,
            minImageList
        } = this.data;
        if (fileNames.length > 0) {
            fileNames.forEach(item => {
                minImageList.push(item.path);
            });
        }
        let fileUrls = [];
        if (minImageList.length > 0) {
            minImageList.forEach(item => {
                //这里复杂的图片上传，改为同步上传，因为小程序只能上传一张图片
                if (item.indexOf("/profile/") > -1) {
                    fileUrls.push(item.replace(config.baseUrl, "").replace(".min.jpg", ""));
                    if (fileUrls.length == minImageList.length) {
                        //上传完毕
                        this.submitApply(fileUrls);
                    }
                } else {
                    syncFileUpload(item).then(res => {
                        fileUrls.push(res.fileName);
                        //验证图片上传完毕
                        if (fileUrls.length == minImageList.length) {
                            this.submitApply(fileUrls);
                        }
                    });
                }
            });
        } else {
            this.submitApply(fileUrls);
        }
    },

    /**
     * 提交表单
     */
    submitApply(fileData) {
        if (this.data.taskName == '提交申请') {
            let {
                taskId,
                procInsId,
                infoData,
                category,
                dataList,
                detailDataList
            } = this.data;
            let applyDetailList = [];
            detailDataList.forEach(detail => {
                applyDetailList.push({
                    superTypeKey: category,
                    typeId: dataList[detail.mainActiveIndex].id,
                    typeName: dataList[detail.mainActiveIndex].text,
                    assetsId: detail.detailId,
                    assetsName: detail.detailName,
                    number: detail.applyNumber,
                    assetsUnit: detail.useUnit,
                    assetsVersion: detail.assetsVersion,
                    useReason: detail.useReason
                });
            });
            let params = {
                taskId,
                instanceId: procInsId,
                comment:"修改并重新提交申请",
                variables: {},
                proProjectApply: {
                    id: infoData.id,
                    deptId: infoData.deptId,
                    projId: infoData.projId,
                    projName: infoData.projName,
                    applyType: infoData.applyType,
                    applyStatus: 1,
                    useTime: infoData.useTime,
                    applyReason: infoData.applyReason,
                    applyFiles: fileData.toString(),
                    proProjectApplyDetailList: applyDetailList
                }
            }
            complete(params).then(res => {
                if (res.code == 200) {
                    app.toast("修改申请信息成功!")
                    setTimeout(() => {
                        wx.redirectTo({
                            url: `../../index/index`,
                        })
                    }, 300)
                }
            });
        } else {
            this.submitData(fileData);
        }
    },

    /**
     * 提交表单
     */
    submitData(fileData) {
        let {
            infoData,
            category,
            dataList,
            detailDataList
        } = this.data;
        let applyDetailList = [];
        detailDataList.forEach(detail => {
            applyDetailList.push({
                superTypeKey: category,
                typeId: dataList[detail.mainActiveIndex].id,
                typeName: dataList[detail.mainActiveIndex].text,
                assetsId: detail.detailId,
                assetsName: detail.detailName,
                number: detail.applyNumber,
                assetsUnit: detail.useUnit,
                assetsVersion: detail.assetsVersion,
                useReason: detail.useReason
            });
        });
        let params = {
            id: infoData.id,
            deptId: infoData.deptId,
            projId: infoData.projId,
            projName: infoData.projName,
            applyType: infoData.applyType,
            applyStatus: 1,
            useTime: infoData.useTime,
            applyReason: infoData.applyReason,
            applyFiles: fileData.toString(),
            proProjectApplyDetailList: applyDetailList
        }
        updateProjectApply(params).then(res => {
            if (res.code == 200) {
                app.toast("修改申请信息成功!")
                setTimeout(() => {
                    wx.redirectTo({
                        url: `../approveTask/index?deployId=${this.data.deployId}&procInsId=${this.data.procInsId}&nickName=${this.data.nickName}&deptName=${this.data.deptName}&procDefName=${this.data.procDefName}&taskId=${this.data.taskId}&taskName=${this.data.taskName}&category=${this.data.category}&projectName=${this.data.projectName}&businessKey=${this.data.businessKey}&businessKeyParName=${this.data.businessKeyParName}&businessDeptId=${this.data.businessDeptId}&startUserId=${this.data.startUserId}`,
                    })
                }, 300)
            }
        });
    },

    //申请说明输入
    applyReasonblur: function (options) {
        this.data.infoData.applyReason = options.detail.value;
    },

    //使用单位 
    onSelectDept(e) {
        this.setData({
            "infoData.deptId": e.detail.id
        })
    },

    //使用时间
    onInputTime(e) {
        this.setData({
            "infoData.useTime": e.detail
        })
    },

    /**
     * 图片上传
     * @param {*} options 
     */
    imgUpload(options) {
        let imgs = options.detail;
        this.setData({
            minImageList: imgs
        });
    },

    /**
     * 文件上传
     * @param {*} options 
     */
    fileUpload(options) {
        let files = options.detail;
        this.setData({
            fileNames: files
        });
    },

    // 手风琴
    onChange(event) {
        this.setData({
            activeName: event.detail,
        });
    },

    returnToPage: function () {
        /*关闭当前页面，跳转到应用内的某个页面。但是不允许跳转到 tabbar 页面*/
        wx.redirectTo({
            url: '../await/index',
        })
    },

    /**
     * 栏目触发事件
     */
    onClickNav(e) {
        var index = e.currentTarget.dataset.index
        let list = this.data.detailDataList;
        list[index].activeId = null;
        list[index].mainActiveIndex = e.detail.index;
        this.setData({
            detailDataList: list
        })
        console.log(e.detail.index, this.data.dataList);
    },

    /**
     * 选项触发事件
     */
    onClickItem(e) {
        var index = e.currentTarget.dataset.index
        let list = this.data.detailDataList;
        list[index].detailId = e.detail.id;
        list[index].detailName = e.detail.text;
        list[index].showDetailsName = e.detail.detailName;
        if (e.detail.units) {
            let itemList = [];
            e.detail.units.split(',').forEach((item, idx) => {
                if (idx == 0) {
                    list[index].useUnitIndex = idx;
                    list[index].useUnit = item;
                }
                itemList.push({
                    id: idx,
                    text: item
                });
            });
            list[index].assetsUnits = itemList;
        }
        list[index].activeId = e.detail.id;
        list[index].showDetailsPopup = false;
        this.setData({
            detailDataList: list
        })
    },

    //新增问题
    newApplyDetail() {
        var data = this.data.detailDataList
        data.push({
            detailId: '',
            detailName: '',
            showDetailsName: '',
            showDetailsPopup: false,
            mainActiveIndex: 0,
            activeId: [],
            useUnit: "",
            useUnitIndex: "",
            assetsUnits: [],
            applyNumber: "",
            assetsVersion: "",
            useReason: ""
        })
        this.setData({
            detailDataList: data
        })
    },

    /**
     * 删除申请详情
     * @param {*} e 
     */
    delApplyDetail(e) {
        var index = e.currentTarget.dataset.index
        var data = this.data.detailDataList
        data.splice(index, 1);
        this.setData({
            detailDataList: data
        })
    },

    //输入申请数量
    onInputNumber(e) {
        var index = e.currentTarget.dataset.index
        let list = this.data.detailDataList;
        let value = e.detail.value;
        list[index].applyNumber = value;
        this.setData({
            detailDataList: list
        })
    },

    //选择资产单位
    onSelectUnit(e) {
        var index = e.currentTarget.dataset.index
        let list = this.data.detailDataList;
        list[index].useUnit = e.detail.text;
        list[index].useUnitIndex = e.detail.id;
        this.setData({
            detailDataList: list
        })
    },

    //输入规格型号
    onInputVersion(e) {
        var index = e.currentTarget.dataset.index
        let list = this.data.detailDataList;
        list[index].assetsVersion = e.detail.value;
        this.setData({
            detailDataList: list
        })
    },

    //输入使用说明
    onInputUseReason(e) {
        var index = e.currentTarget.dataset.index
        let list = this.data.detailDataList;
        list[index].useReason = e.detail.value;
        this.setData({
            detailDataList: list
        })
    },

    //关闭申请明细选择
    onShowPopup(e) {
        var index = e.currentTarget.dataset.index
        let list = this.data.detailDataList;
        list[index].showDetailsPopup = true;
        this.setData({
            detailDataList: list
        })
    },

    //关闭申请明细选择
    onClosePopup(e) {
        var index = e.currentTarget.dataset.index
        let list = this.data.detailDataList;
        list[index].showDetailsPopup = false;
        this.setData({
            detailDataList: list
        })
    },

    /**
     * 切换临建项目
     * @param {*} e 
     */
    onProjectSelect: function (e) {
        let projectId = e.detail.id;
        let projectName = e.detail.text;
        app.globalData.useProjectId = projectId;
        app.globalData.useProjectName = projectName;
        this.setData({
            initData: {
                id: app.globalData.useProjectId,
                text: app.globalData.useProjectName
            }
        })
    },

    //流程退回
    onStopApply() {
        if (!this.data.stopBtnShow) {
            app.toast("请填写终止原因!")
            this.setData({
                stopBtnShow: true
            })
            return;
        } else {
            if (this.data.comment == "") {
                app.toast("请填写终止原因!")
                this.setData({
                    stopBtnShow: true
                })
                return;
            }
        }
        let that = this
        //弹出确认
        wx.showModal({
            title: '提示',
            content: '是否终止当前流程申请？',
            success: function (sm) {
                if (sm.confirm) {
                    that.submitStopProcess();
                }
            }
        })
    },

    /**
     * 确认撤回
     */
    submitStopProcess() {
        stopProcess({
            instanceId: this.data.procInsId,
            comment: this.data.comment
        }).then(res => {
            if (res.code == 200) {
                app.toast("终止流程申请成功!")
                setTimeout(() => {
                    wx.redirectTo({
                        url: '../../index/index',
                    })
                }, 500)
            }
        });
    },

    //终止原因
    commentblur: function (options) {
        this.data.comment = options.detail.value;
    },

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

    },

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

    },

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

    },

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

    },

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

    },

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

    },

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

    }
})