import DataUtils from '../utils/DataUtils';
import SelectionLayer from '../common/SelectionLayer';

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

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

    /**
     * 线宽
     */
    this._lineWidth = DataUtils.default(options.lineWidth, 7.5);

    /**
     * 线颜色
     */
    this._lineColor = DataUtils.default(options.lineColor, '#87CEFA');

    // 图层对象
    this._selectionLayer = new SelectionLayer({
      map: this._map,
      minzoom: this._minzoom,
      lineWidth: this._lineWidth,
      lineColor: this._lineColor
    });
  }

  /**
   * 设置数据
   * @param {Object|Array} data -GeoJSON要素/要素集/要素集合
   */
  setData(data) {
    this._selectionLayer.setData(data);
  }

  /**
   * 添加数据
   *@param {Object|Array} data -GeoJSON要素/要素集/要素集合
   */
  appendData(data) {
    this._selectionLayer.appendData(data);
  }

  /**
   * 获取数据
   *
   * @returns {Object}
   */
  getData() {
    // 判断返回折线要素集 or 点要素集
    const lineFC = this._selectionLayer._lineFC;
    if (lineFC.features.length > 0) {
      return lineFC;
    }

    return this._selectionLayer._fc;
  }

  /**
   * 清除数据
   */
  clearData() {
    this._selectionLayer.clearData();
  }

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

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