class Cesium3DTilesLayerUtil {}

Cesium3DTilesLayerUtil.addCesium3DTilesLayer = function (
  layer,
  mapView,
  callback
) {
  // 添加3DTiles
  layer.layerIndex = mapView.scene.layers.appendCesium3DTilesetLayer(
    layer.url,
    {
      // 是否显示3d tileset模型
      show: layer.visible,
      // 最大屏幕空间误差
      maximumScreenSpaceError: layer.maximumScreenSpaceError,
      // 是否自动跳转到模型的位置
      autoReset: layer.autoReset,
      // 跳转时间(秒)
      duration: layer.duration,
      // 是否显示外包盒
      debugShowBoundingVolume: layer.debugShowBoundingVolume,
      // 设置数据请求头
      headers: layer.headers,
      // 回调函数，加载完成后返回3DTileset图层
      loaded(tileSet) {
        tileSet.id = layer.id
        callback(tileSet)
      }
    }
  )

  // 启用高亮
  if (layer.enableHighLight) {
    const _handler = new Cesium.ScreenSpaceEventHandler(mapView.scene.canvas)
    let _lastFeature
    _handler.setInputAction(function onLeftClick(event) {
      // 点选要素
      const pickedFeature = mapView.scene.pick(event.position)
      if (pickedFeature) {
        // 恢复上一个的颜色
        if (_lastFeature && _lastFeature.content.tile.originalColor) {
          _lastFeature.content.tile.color = Cesium.Color.clone(
            _lastFeature.content.tile.originalColor
          )
          _lastFeature.content.tile.originalColor = undefined
        }
        // 保存原有颜色
        pickedFeature.content.tile.originalColor = Cesium.Color.clone(
          pickedFeature.content.tile.color
        )
        // 赋予要素颜色
        const _color = layer.highLightColor.toCesiumRGB()
        pickedFeature.content.tile.color = new Cesium.Color(
          _color.red,
          _color.green,
          _color.blue,
          _color.alpha
        )
        // 备份本次选择的模型
        _lastFeature = pickedFeature
        if (
          layer.highLightCallback &&
          layer.highLightCallback instanceof Function
        ) {
          layer.highLightCallback(_lastFeature.content.tile, event.position)
        }
      }
    }, Cesium.ScreenSpaceEventType.LEFT_CLICK)
  }
}

/**
 * 移除图层
 * @param {Layer} layer 基本图层对象
 * @param {Viewer} sceneView Cesium的视图对象
 * */
Cesium3DTilesLayerUtil.removeLayer = function (layer, sceneView) {
  sceneView.scene.layers.removeCesium3DTilesetLayerByID(layer.layerIndex)
}

export default Cesium3DTilesLayerUtil
