import DataUtils from '../utils/DataUtils';
import VerifyUtils from "../utils/VerifyUtils";
import GeoJsonProvider from '../geog/GeoJsonProvider';
import SimpleCircleLayer from '../common/SimpleCircleLayer';

/**
 * 定义缺陷点图层
 *
 * @alias DefectLayer
 *
 * @summary <用于加载缺陷点图层>
 */
export default class DefectLayer {
    /**
     * 构造函数
     * @param {Object} options -图层选项
     */
    constructor(options) {
        /**
         * 地图对象
         * @type {Object}
         */
        this._map = options.map;

        /**
         * 最小缩放层级
         * @type {String}
         */
        this._minzoom = DataUtils.default(options.minzoom, 10);

        // 隐患数据源ID
        this._sourceId = DataUtils.default(options.sourceId, 'pipe_facility_defect');

        /** 图层ID **/
        this._layerId = DataUtils.default(options.layerId, this._sourceId);

        /** 图层对象 **/
        // 初始化图层
        let colorExp = {
            property: "level",
            type: "categorical",
            stops: [
                [0, "#49AA77"],
                [1, "#FAAD14"],
                [2, "#FAAD14"],
                [3, "#FF4D4F"],
                [4, "#FF4D4F"],
            ],
            default: "#49AA77"
        };

        // 缺陷点图层
        this._circleLayer = new SimpleCircleLayer({
            map: this._map,
            minzoom: this._minzoom,
            color: colorExp,
            outline: true,
            lineColor: colorExp,
            sourceId: this._sourceId,
            layerId: this._layerId
        });
    }

    /** 公有方法 **/
    /**
     * 设置数据
     * @param {Array|Object} data -数据
     */
    setData(data) {
        let fc = null;
        if (VerifyUtils.isGeoJsonFC(data)) {
            fc = data;
        } else if (VerifyUtils.isGeoJsonFeature(data)) {
            fc = GeoJsonProvider.getEmptyFC();
            fc.features = [data];
        } else if (VerifyUtils.isArray(data)) {
            fc = GeoJsonProvider.data2PointFC(data);
        }

        this._fc = fc;
        // 设置数据
        this._circleLayer.setData(this._fc);
    }

    /**
     * 设置过滤器
     * @param {Array} filter -过滤器
     */
    setFilter(filter) {
        this._circleLayer.setFilter(filter);
    }

    /**
     * 加载图层
     */
    loadLayer() {
        if (!this.hasLayer()) {
            this._circleLayer.loadLayer();
        }

        this.showLayer(trut);
    }

    /**
    * 显示/隐藏图层
    * @param {Boolean} isShow -是否显示
    */
    showLayer(isShow) {
        this._circleLayer.showLayer(isShow);
    }

    /**
     * 绑定单击事件
     * @param {Function} event -事件函数
     */
    onClick(event) {
        this._circleLayer.onClick(event);
    }

    /**
     * 移除图层
     */
    removeLayer() {
        this._circleLayer.removeLayer();
        // 移除数据源
        this._circleLayer.removeSource();
    }

    /**
     * 判断图层是否已加载
     *
     * @returns {Boolean}
     */
    hasLayer() {
        return this._circleLayer.hasLayer();
    }
}
