const config = {
    lineDict: [
        {key: "P", lineType: "solid", color: "#000000"},
        {key: "E", lineType: "dotted", color: "#f20c00"},
        {key: "I", lineType: "dashed", color: "#ff8936"},
        {key: "M", lineType: "solid", color: "#8d4bbb"},
        {key: "HM", lineType: "solid", color: "#0eb83a"}
    ],
    // 默认配置
    defaultParams: {},
};

export {config};

/**
 * 获取x6节点
 * @param id
 * @param pid
 * @param x
 * @param y
 * @param name
 * @param struTypeCode
 * @param zIndex
 */
export function getX6Node(id, pid, x, y, name, struTypeCode, zIndex) {
    return {
        id: id, // ID
        parent: pid, // 父节点
        x: Number(x), // 位置：x轴
        y: Number(y), // 位置：y轴
        width: 100, // 宽
        height: 60, // 高
        label: name, // 名称
        shape: struTypeCode === '01' ? 'rect' : 'ellipse', // 结构：矩形，接口：椭圆
        struTypeCode: struTypeCode, // 节点类型
        zIndex: zIndex,
        // 属性
        attrs: {
            label: {
                fill: '#000000', // 文字
                refX: 0.5, // 文字距离左方比例
                refY: 8, // 文字距离上方比例
                textAnchor: 'middle',
                textVerticalAnchor: 'top',
                textWrap: {
                    width: -10, // 宽度减少 10px
                    height: 40, // 高度为参照元素高度的一半
                    ellipsis: true, // 文本超出显示范围时，自动添加省略号
                    breakWord: true, // 是否截断单词
                },
                title: name, // 标题
            },
            body: {
                stroke: '#8f8f8f', // 边框颜色
                strokeWidth: 1, // 边框宽度
                fill: '#ddd', // 填充颜色
                rx: 6,
                ry: 6,
            },
        },
        ports: {
            groups: {
                defaultGroup: {
                    attrs: {
                        circle: {
                            r: 4,
                            magnet: true, // 当 magnet 属性为 true 时，表示该元素可以被链接，即在连线过程中可以被当做连线的起点或终点，与连接桩类似。
                            stroke: '#31d0c6',
                            fill: '#fff',
                            strokeWidth: 2,
                            style: {
                                visibility: 'hidden',
                            }
                        },
                    },
                    position: {
                        name: 'ellipseSpread', // 沿椭圆均匀分布的连接桩
                        args: {
                            compensateRotate: true, // 是否沿圆弧修正连接桩的旋转角度。
                        },
                    },
                },
            },
            items: [
                {id: 'port1', group: 'defaultGroup'},
                {id: 'port2', group: 'defaultGroup'},
                {id: 'port3', group: 'defaultGroup'},
                {id: 'port4', group: 'defaultGroup'}
            ],
        }
    };
}

/**
 * 获取下一个X6节点位置
 * @param pid
 * @param struTypeCode
 * @param position
 * @returns {{x: number, y: number}}
 */
export function getNextX6NodePosition(pid, struTypeCode, position = {x: 0, y: 0}) {
    let embedPadding = 20; // 间距
    let treeObj = $.fn.zTree.getZTreeObj('leftTree');
    let nodes = treeObj.getNodesByFilter((node) => {
        return node.pid === pid && node.chartFlag === 1 && node.struTypeCode === struTypeCode;
    });
    // 左序号升序
    nodes.sort((a, b) => {
        return a.leftNo - b.leftNo
    });
    let leftNos = [];
    nodes.forEach(node => {
        leftNos.push(node.leftNo);
    });
    // 最大左序号
    let maxLeftNo = Math.max(...leftNos);
    let lastNode = treeObj.getNodeByParam("leftNo", maxLeftNo, null);
    if (!lastNode) return position;
    // x6节点是否存在
    let x6Node = window.rightX6Graph.getCellById(lastNode.id);
    if (x6Node) {
        let x6NodePosition = x6Node.getPosition();
        position.x = (x6NodePosition.x + embedPadding);
        position.y = (x6NodePosition.y + embedPadding);
    }
    return position;
}

/**
 * 获取多个X6节点位置
 * @param len
 * @param clickPosition
 * @returns {*[]}
 */
export function getNextX6NodePositions(len, clickPosition) {
    let embedPadding = 20; // 间距
    let positions = [];
    for (let i = 0; i < len; i++) {
        let position = {};
        jQuery.extend(true, position, clickPosition);
        positions.push(position);
        clickPosition.x += embedPadding;
        clickPosition.y += embedPadding;
    }
    return positions;
}

/**
 * 显示/隐藏 连接桩
 * @param node
 * @param show
 */
export function showHidePorts(node, show) {
    node.setPropByPath(
        "ports/groups/defaultGroup/attrs/circle/style/visibility",
        show ? "visible" : "hidden",
    );
}


