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

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

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

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

    /**
     * 过滤条件数组
     * @type {Array}
     */
    this._filter = DataUtils.default(options.filter, undefined);

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

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

    /* 图层对象 */
     // 流向图层
     if (!this._flowLayer) {
      this._flowLayer = new SimpleMarkerLayer({
         map: this._map,
         minzoom: this._minzoom,
         icon: this._icon,
         filter: this._filter,
         sourceId: this._sourceId,
         layerId: this._layerId
       });
        // 设置图标旋转的角度
        this._flowLayer.setLayoutProperty('icon-rotate', ['get', 'bearing']);
     }
  }

  /** 公有方法 **/
   /**
   * 设置数据
   * @param {Array|Object} data -数据
   */
    setData(data = null) {
        // 加载图层
        this.loadLayer();
        if (data) {
          this._flowLayer.setData(data);
        }
      }



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

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

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

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

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


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

  /**
   * 移除数据源
   */
  removeSource() {
    this._flowLayer.removeSource();
  }

}
