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

class WMTSLayerUtil {}

/**
 * 添加WMTS图层
 * @param {WMTSLayer} layer WMTS图层基本对象
 * @param {Viewer} innerView Cesium的视图对象
 * @return {Object} 创建的WMTS图层对象
 * */
WMTSLayerUtil.addWMTSLayer = function (layer, innerView) {
  const {tileMatrixSetId, tileMatrixSets} = layer.activeLayer
  const TileMatrixSet = tileMatrixSets.find(
    (tileMatrix) => tileMatrix.id === tileMatrixSetId
  )
  const tileInfo = TileMatrixSet.tileInfo

  const tilingScheme = getTilingSchemeBySpatialReference(
    layer.spatialReference,
    layer.extent,
    tileInfo
  )

  let url = layer.url
  if (layer.tokenValue && layer.tokenKey) {
    url += `?${layer.tokenKey}=${layer.tokenValue}`
  }
  const options = {
    // 服务基地址
    url,
    // 图层名称
    layer: layer.activeLayer.title,
    // 请求格式
    format: layer.activeLayer.imageFormat,
    // 瓦片样式
    style: layer.activeLayer.styleId,
    // 比例尺
    tileMatrixSetID: layer.activeLayer.tileMatrixSetId,
    // 裁图方式
    tilingScheme,
    // 瓦片宽度
    tileWidth: layer.imageWidth,
    // 瓦片高度
    tileHeight: layer.imageHeight
  }
  // 是天地图，且是4326
  if (
    options.url.indexOf('.tianditu.gov.cn/') > -1 &&
    options.tileMatrixSetID === 'c'
  ) {
    // 要加一级
    options.tileMatrixLabels = [
      '1',
      '2',
      '3',
      '4',
      '5',
      '6',
      '7',
      '8',
      '9',
      '10',
      '11',
      '12',
      '13',
      '14',
      '15',
      '16',
      '17',
      '18',
      '19',
      '20'
    ]
  }
  // 获取图层index
  const index = getCesiumLayerIndex(layer, innerView)
  const wmtsLayer = innerView.scene.imageryLayers.addImageryProvider(
    new Cesium.WebMapTileServiceImageryProvider(options),
    index
  )

  wmtsLayer.id = layer.id
  wmtsLayer._realIndex = layer._realIndex + 1
  return wmtsLayer
}

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

export default WMTSLayerUtil
