import { getTemplateVal } from "../../public-function";

export default {
    /**
     * 获取 海量点 分组样式 content 方法
     * @param {Object} data 数据
     * @param {Object} iconConfig 图标配置
     * @param {Object} pointSimplifierIns 海量点实例
     * @returns content function
     */
    getGroupStyleContent(data, iconConfig, pointSimplifierIns) {
        let image, isLoaded = false;
        image = document.createElement("img");
        image.crossOrigin = "Anonymous";
        image.addEventListener("load", function() {
            isLoaded = true;
            pointSimplifierIns.renderLater();
        }, false);
        image.src = iconConfig.url;

        return function(ctx, x, y, width, height) {
            if (isLoaded) {
                // 保存坐原点平移之前的状态
                ctx.save();
                if (data.angle) {
                    // 移动原点
                    ctx.translate(x + width / 2, y + height / 2);
                    // 旋转角度
                    ctx.rotate(Math.PI / 180 * data.angle);
                    // 恢复原点
                    ctx.translate(-x - width / 2, -y - height / 2);
                }
                // 绘制图片
                ctx.drawImage(image, x, y, width, height);
                // 恢复到最初状态
                ctx.restore();
            }
        }
    },
    /**
     * 计算标记数
     * @param data
     *        [
     *          [lng,lat],
     *          [lng,lat]
     *        ] 第一个为起始点，最后一个为终点 其余的途经点
     */
    onCalculationSign(data, length = 18) {
        let newData = [];
        try {
            if (data.length > length) {
                data.map((item, index) => {
                    if (index == 0) {
                        // 起始点
                        newData[index] = new AMap.LngLat(item[0], item[1]);
                    } else {
                        if (index < length - 1) {
                            // 途经点
                            newData[index] = new AMap.LngLat(item[0], item[1]);
                        } else {
                            // 终点
                            newData[index] = new AMap.LngLat(data[data.length - 1][0], data[data.length - 1][1]);
                            throw Error();
                        }
                    }
                })
            } else {
                data.map((item, index) => {
                    newData[index] = new AMap.LngLat(data[index][0], data[index][1]);
                })
            }
        } catch (e) {
            //console.log(e);
        }
        console.log(newData)
        return newData;
    },
    /**
     * 点聚合的自定义绘制
     * @param {Object} context 点聚合内容
     *                 context.count 当前聚合点下聚合的 Marker 的数量
     *                 context.marker 当前聚合点显示的 Marker
     * @param {Object} config 配置
     */
    renderClusterMarker(context, config) {
        const size = config.size || [40, 40]
        const unit = config.sizeUnit || 'px'
        const borderRadius = config.borderRadius || '50%'
        const className = config.className ? 'marker-cluster ' + config.className : 'marker-cluster'

        let div = document.createElement('div');
        div.setAttribute('class', className)
        div.style.width = String(size[0]) + unit
        div.style.height = String(size[1]) + unit;

        if (config.content) {
            //  自定义内容
            div.innerHTML = getTemplateVal(config.content, context)
        } else {
            //  默认内容
            div.style.backgroundColor = config.backgroundColor || '#ff7272';
            div.style.borderRadius = borderRadius;

            div.innerHTML = context.count;
            div.style.lineHeight = String(size[1]) + unit;
            div.style.color = config.color || '#ffffff';
            div.style.fontSize = '14px';
            div.style.textAlign = 'center';
        }

        context.marker.setOffset(new AMap.Pixel(-size[0] / 2, -size[1] / 2));
        context.marker.setContent(div)
    },
    /**
     * 获取标注类offset
     * @param {String} anchor 图标锚点类型
     * @param {Array} size 图标尺寸
     * @returns 
     */
    getLabelMarkerOffset(anchor, size, version) {
        const isTwo = version == 2 // 是否是2.0版本
        let x = size[0]
        let y = size[1]

        let hoverOffset = [-x / 2, -y / 2]
        let clickOffset = [-x / 2, -y / 2]
        switch (anchor) {
            case 'center':
                if (isTwo) {
                    hoverOffset = [0, y / 2]
                } else {
                    hoverOffset = [-x / 2, -y / 2]
                }
                clickOffset = [-x / 2, -y / 2]
                break;
            case 'bottom-center':
                if (isTwo) {
                    hoverOffset = [0, 0]
                } else {
                    hoverOffset = [-x / 2, -y]
                }
                clickOffset = [-x / 2, -y]
                break;
            default:
                break;
        }
        return { hoverOffset, clickOffset }
    }
}