import DataUtils from "../utils/DataUtils";
import SimpleMarkerLayer from '../common/SimpleMarkerLayer';

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

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

    /**
     * 图标ID
     * @type {String}
     */
    this._icon = DataUtils.default(options.icon, 'icon_order');

    // 点位图层
    this._markerLayer = new SimpleMarkerLayer({
      map: this._map,
      minzoom: this._minzoom,
      sourceId: 'pipe_facility_order',
      icon: this._icon,
      field: 'type',
      textOffset: [0.8, 0.2]
    });
  }

  /**
   * 设置工单数据
   * @param {String|Object} data -工单数据
   */
  setData(data = null) {
    // 加载图层
    if (!this.hasLayer()) {
      this._markerLayer.loadLayer();
    }

    // 显示图层
    this.showLayer(true);
  }

  /**
   * 设置筛选器
   * @param {Array} filter -筛选器
   */
  setFilter(filter) {
    this._markerLayer.setFilter(filter);
  }

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

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

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

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

  /**
   * 绑定事件
   * @param {String} name -事件名称
   * @param {Function} event -事件函数
   */
  onEvent(name, event) {
    this._markerLayer.onEvent(name, event);
  }
}
