/**
 * 展示当前措施转换按钮 （ture：显示，false：不显示）
 * @param treeId zTree标识
 * @param checkNode 选中节点
 * @returns {number|*}
 */
export function showCurConvertBtn(treeId, checkNode) {
    if (checkNode.struTypeCode === '07') {
        let treeObj = $.fn.zTree.getZTreeObj(treeId);
        let faultNode = treeObj.getNodeByParam("id", checkNode.pid, null);
        if (faultNode) {
            let measureNodes = treeObj.getNodesByParam("pid", faultNode.id, null);
            let curNode = (measureNodes || []).filter((item) => {
                return item.struTypeCode === '14';
            })[0];
            if (curNode) return false;
        }
    }
    return true;
}

/**
 * 展示粘贴按钮
 * （0：显示，1：不显示）
 * @param treeId zTree标识
 * @param pasteTypeCodes 粘贴业务关系
 * @param copyCutNode 复制剪切节点
 * @param checkNode 选中节点
 * @param copyCutFlag 复制剪切标识位（copy/cut）
 * @returns {number|*}
 */
export function showPasteBtn(treeId, pasteTypeCodes, copyCutNode, checkNode, copyCutFlag) {
    let isValidate = 1;
    if (!copyCutNode) {
        return isValidate;
    }
    if (copyCutFlag === "cut") {
        let childrenId = [];
        // 剪切不能粘贴自己
        if (copyCutNode.id === checkNode.id) {
            return isValidate;
        } else if (copyCutNode.struTypeCode === "01") {
            let treeObj = $.fn.zTree.getZTreeObj(treeId);
            // 取得所有的所有孩子
            getChildrenId(treeObj, copyCutNode, childrenId);
            if (childrenId.indexOf(checkNode.id) !== -1) {
                return isValidate;
            }
        }
    }
    let pasteParent = [];
    pasteTypeCodes.filter((item) => {
        if (item.children.indexOf(copyCutNode.struTypeCode) !== -1) {
            pasteParent.push(item.key);
        }
    });
    if (pasteParent.indexOf(checkNode.struTypeCode) !== -1) {
        isValidate = 0;
    }
    // 当前措施不能重复粘贴
    if (copyCutNode.struTypeCode === '14') {
        let cMeasureNode = (checkNode?.children || []).filter((item) => {
            return item.struTypeCode === '14'
        })[0];
        if (cMeasureNode) isValidate = 1;
    }
    return isValidate;
}

/**
 * 递归取得所有孩子节点ID
 * @param treeObj zTree标识
 * @param checkNode 选中节点
 * @param childrenId 结果集
 * @returns {*}
 */
function getChildrenId(treeObj, checkNode, childrenId) {
    let childNodes = treeObj.getNodesByParam("pid", checkNode.id, null);
    for (let i = 0, len = childNodes.length; i < len; i++) {
        childrenId.push(childNodes[i].id);
        getChildrenId(treeObj, childNodes[i], childrenId);
    }
    return childrenId;
}

/**
 * 展示合并按钮 （true：显示，false：不显示）
 * @param treeId zTree标识
 * @param checkNode 选中节点
 * @returns {number|*}
 */
export function showMergeBtn(treeId, checkNode) {
    let treeObj = $.fn.zTree.getZTreeObj(treeId);
    // 同级别、同类型。（09，10除外）
    if ("09,10".indexOf(checkNode.struTypeCode) !== -1) {
        // 只有一个预防/探测措施也要显示合并按钮
        return treeObj.getNodesByParam("struTypeCode", checkNode.struTypeCode, null).length > 0;
    } else {
        return treeObj.getNodesByParam("pid", checkNode.pid, null).length > 1;
    }
}

/**
 * 展示上移按钮 （true：显示，false：不显示）
 * @param treeId zTree标识
 * @param checkNode 选中节点
 * @returns {number|*}
 */
export function showMoveUpBtn(treeId, checkNode) {
    let treeObj = $.fn.zTree.getZTreeObj(treeId);
    let levelNodes = treeObj.getNodesByParam("pid", checkNode.pid, null);
    // 特殊处理，优化措施不允许上移到当前措施
    if ('07'.indexOf(checkNode.struTypeCode) !== -1) {
        levelNodes = levelNodes.filter(item => {
            return item.struTypeCode === checkNode.struTypeCode;
        });
    }
    // 特殊处理，接口不允许上移到结构上边
    if ('99'.indexOf(checkNode.struTypeCode) !== -1) {
        levelNodes = levelNodes.filter(item => {
            return item.struTypeCode === checkNode.struTypeCode;
        });
    }
    let curIndex = levelNodes.findIndex(item => {
        return item.id === checkNode.id;
    });
    return levelNodes[--curIndex];
}

/**
 * 展示下移按钮 （true：显示，false：不显示）
 * @param treeId zTree标识
 * @param checkNode 选中节点
 * @returns {number|*}
 */
export function showMoveDownBtn(treeId, checkNode) {
    let treeObj = $.fn.zTree.getZTreeObj(treeId);
    let levelNodes = treeObj.getNodesByParam("pid", checkNode.pid, null);
    // 特殊处理，接口不允许上移到结构上边
    if ('01'.indexOf(checkNode.struTypeCode) !== -1) {
        levelNodes = levelNodes.filter(item => {
            return item.struTypeCode === checkNode.struTypeCode;
        });
    }
    let curIndex = levelNodes.findIndex(item => {
        return item.id === checkNode.id;
    });
    return levelNodes[++curIndex];
}

/**
 * 取得上移下移目标节点
 * @param treeId zTree标识
 * @param checkNode 选中节点
 * @param optType -1上移，1下移
 * @returns {number|*}
 */
export function getMoveTargetNode(treeId, checkNode, optType) {
    let treeObj = $.fn.zTree.getZTreeObj(treeId);
    let levelNodes = treeObj.getNodesByParam("pid", checkNode.pid, null);
    let curIndex = levelNodes.findIndex(item => {
        return item.id === checkNode.id;
    });
    return optType === 1 ? levelNodes[++curIndex] : levelNodes[--curIndex];
}

/**
 * 展示显示按钮
 * @param treeId
 * @param checkNode
 * @returns {boolean}
 */
export function showShowBtn(treeId, checkNode) {
    let treeObj = $.fn.zTree.getZTreeObj(treeId);
    let parentNode = treeObj.getNodeByParam("id", checkNode?.pid);
    // 特殊处理，根节点一定显示
    if (parentNode.deep === 1) {
        return true;
    }
    // 父节点已经隐藏，当前节点不允许显示
    if (parentNode.chartFlag === 0) {
        return false;
    }
    return true;
}
