import { LayerEventType, LayerType } from '@mapgis/webclient-common'

class ApplyLayerUpdateUtil {
  static applyUpdate(view, layer, innerLayer, event) {
    // 确保有updateContent
    if (event.updateContent) {
      for (let i = 0; i < event.updateContent.length; i++) {
        const updateContent = event.updateContent[i]
        // 有updateContent
        if (updateContent) {
          switch (updateContent.name) {
            // 更新主图层可见性
            case 'visible':
              // 根据图层类型进行处理
              switch (layer.type) {
                case LayerType.wms:
                case LayerType.igsMapImage:
                case LayerType.igsTile:
                case LayerType.m3d:
                case LayerType.scene:
                case LayerType.cesium3DTiles:
                  innerLayer.show = !innerLayer.show
                  break
                default:
              }
              break
            // 更新透明度
            case 'opacity':
              // 根据图层类型进行处理
              switch (layer.type) {
                case LayerType.wms:
                  innerLayer.alpha = layer.opacity
                  break
                default:
              }
              break
            default:
          }
        }
      }
    }
    // 确保图层对象存在
    if (!innerLayer) return
    // 是否更新图层
    let isUpdate = false
    // 确认图层类型
    switch (layer.type) {
      // IGS矢量瓦片
      case LayerType.igsVectorTile:
        innerLayer.updateStyle(layer.style)
        isUpdate = true
        break
      default:
    }
    // 确认更新类型
    if (event.extend && event.extend.type) {
      switch (event.extend.type) {
        // 更新图层透明度
        case LayerEventType.layerUpdateOpacity:
          // 根据图层类型进行处理
          switch (layer.type) {
            case LayerType.igsMapImage:
            case LayerType.igsTile:
              innerLayer.alpha = layer.opacity
              isUpdate = true
              break
            case LayerType.m3d:
            case LayerType.scene:
            case LayerType.cesium3DTiles:
              innerLayer = view._innerView.scene.layers.getLayer(
                layer.layerIndex
              )
              innerLayer.translucency = layer.opacity
              break
            default:
          }
          break
        // 更新图层显隐
        case LayerEventType.layerUpdateVisible:
          // 根据图层类型进行处理
          switch (layer.type) {
            case LayerType.igsMapImage:
            case LayerType.igsTile:
            case LayerType.m3d:
            case LayerType.scene:
            case LayerType.cesium3DTiles:
              innerLayer.show = !innerLayer.show
              isUpdate = true
              break
            default:
          }
          break
        // 更新图层样式
        case LayerEventType.layerUpdateStyle:
          // 根据图层类型进行处理
          switch (layer.type) {
            case LayerType.igsVectorTile:
              innerLayer.updateStyle(layer.style)
              isUpdate = true
              break
            default:
          }
          break
        // 更新子图层显隐
        case LayerEventType.layerSublayerVisible:
          // 根据图层类型进行处理
          switch (layer.type) {
            case LayerType.igsMapImage:
              innerLayer._imageryProvider._layers = layer.layers
              isUpdate = true
              break
            default:
          }
          break
        default:
      }
      // 发送图层更新事件
      if (isUpdate) {
        // 更新样式
        return new Promise((reslove) => {
          reslove()
        })
      } else {
        return null
      }
    }
  }
}
export default ApplyLayerUpdateUtil
