import DataUtils from '../utils/DataUtils';
import EquipmentLayer from './EquipmentLayer';

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

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

    /**
     * 数据源ID
     * @type {String}
     */
    this._sourceId = DataUtils.default(options.sourceId, 'pipe_equipment_cod');

    /**
     * 图层ID
     * @type {String}
     */
    this._layerId = DataUtils.default(options.layerId, this._sourceId);

    // 初始化图层
    this._equipLayer = new EquipmentLayer({
      map: this._map,
      minzoom: this._minzoom,
      icon: {
        type: 'categorical',
        property: 'equState',
        stops: [
          [1, 'equip_cod-green'],
          [12, 'equip_cod-orange'],
          [13, 'equip_cod-red'],
          [0, 'equip_cod-grey'],
        ],
        default: 'equip_cod-green'
      },
      sourceId: this._sourceId,
      layerId: this._layerId
    });
  }

  /** 公有方法 **/
  /**
   * 设置设备点数据
   * @param {Object|Array} data -GeoJson要素/要素集/数组
   */
   setData(data) {
    // 设置数据
    this._equipLayer.setData(data);
  }

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

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

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

  /**
   * 移除图层
   */
  removeLayer() {
    this._equipLayer.removeLayer();
  }

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

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