import {
  getCesiumLayerIndex,
  getTilingSchemeBySpatialReference
} from './support/utils'

class ArcGISMapImageLayerUtil {}

/**
 * 添加动态图层
 * @private
 * @param {Layer} layer 基本图层对象
 * @param {Viewer} innerView Cesium的视图对象
 * @return {Object} 创建好的Cesium图层对象
 * */
ArcGISMapImageLayerUtil.addArcGISMapImageLayer = function (layer, innerView) {
  const tilingScheme = getTilingSchemeBySpatialReference(
    layer.spatialReference,
    layer.extent
  )
  const options = {
    // ArcGIS MapServer服务地址
    url: layer.url,
    // 是否使用已经预缓存的瓦片方式加载图层，为false表示不使用瓦片方式加载图层，使用export服务加载图层
    usePreCachedTilesIfAvailable: false,
    // 逗号分隔的列表，用于规定加载的图层，未定义表示加载所有的图层
    layers: layer.layers,
    // 地图瓦片的切分方式,经纬度或者Web墨卡托
    tilingScheme
  }
  // 获取图层index
  const index = getCesiumLayerIndex(layer, innerView)
  // 加载ArcGIS地图文档服务
  const arcgisMapImageLayer = innerView.imageryLayers.addImageryProvider(
    new Cesium.ArcGisMapServerImageryProvider(options),
    index
  )
  // 设置id
  arcgisMapImageLayer.id = layer.id
  // 设置index，layer._realIndex + 1是因为cesium第0个是底图，因此顺序从1开始
  arcgisMapImageLayer._realIndex = layer._realIndex + 1
  return arcgisMapImageLayer
}

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