import { defaultValue, getIGSDynamicLayer } from '@mapgis/webclient-common'
import {
  getCesiumLayerIndex,
  getTilingSchemeBySpatialReference
} from './support/utils'

class IGSMapImageLayerUtil {}

/**
 * 添加动态图层
 * @private
 * @param {Layer} layer 基本图层对象
 * @param {Viewer} innerView Cesium的视图对象
 * @param {Object} options 额外构造参数
 * @return {Object} 创建好的Cesium图层对象
 * */
IGSMapImageLayerUtil.addIGSMapImageLayer = function (
  layer,
  innerView,
  options
) {
  options = defaultValue(options, {})
  const _isDynamicLayers = defaultValue(options.isDynamicLayers, false)
  const tilingScheme = getTilingSchemeBySpatialReference(
    layer.spatialReference,
    layer.extent
  )

  // 更新子图层显隐信息
  layer._setLayers()

  const _options = {
    // 服务基地址
    url: layer.url,
    // HTTP请求方式
    httpMethod: layer.httpMethod,
    // 瓦片宽度
    tileWidth: layer.imageWidth,
    // 瓦片高度
    tileHeight: layer.imageHeight,
    // 是否显示子图层
    layers: layer.layers,
    // 地图瓦片的切分方式,经纬度或者Web墨卡托
    tilingScheme
  }
  // 只有指定添加专题图时，才会启用专题图
  if (_isDynamicLayers) {
    _options.dynamicLayers = getIGSDynamicLayer(layer)
  }
  // 获取图层index
  const index = getCesiumLayerIndex(layer, innerView)
  // 加载IGS二维地图文档服务
  const igsMapImageLayer = innerView.imageryLayers.addImageryProvider(
    new Cesium.MapGISMapServerImageryProvider(_options),
    index
  )

  // 设置id
  igsMapImageLayer.id = layer.id
  // 设置index，layer._realIndex + 1是因为cesium第0个是底图，因此顺序从1开始
  igsMapImageLayer._realIndex = layer._realIndex + 1
  return igsMapImageLayer
}

/**
 * 移除图层
 * @param {Object} layer 图层对象
 * @param {Viewer} innerView Cesium的视图对象
 * */
IGSMapImageLayerUtil.removeLayer = function (layer, innerView) {
  innerView.imageryLayers.remove(layer, true)
}

export default IGSMapImageLayerUtil
