/**
 * @Author: Caven
 * @Date: 2020-01-21 15:54:56
 */

import TerrainType from './TerrainType'

const { Cesium } = DC.Namespace

class TerrainFactory {
  /**
   * Create ellipsoid terrain
   * @param options
   * @returns {module:cesium.EllipsoidTerrainProvider}
   */
  static createEllipsoidTerrain(options) {
    return new Cesium.EllipsoidTerrainProvider(options)
  }

  /**
   * Create url terrain
   * @param options
   * @returns {module:cesium.CesiumTerrainProvider}
   */
  static createUrlTerrain(options) {
    return new Cesium.CesiumTerrainProvider(options)
  }

  /**
   * Create google terrain
   * @param options
   * @returns {module:cesium.GoogleEarthEnterpriseTerrainProvider}
   */
  static createGoogleTerrain(options) {
    return new Cesium.GoogleEarthEnterpriseTerrainProvider(options)
  }

  /**
   * Create arcgis terrain
   * @param options
   * @returns {module:cesium.ArcGISTiledElevationTerrainProvider}
   */
  static createArcgisTerrain(options) {
    return new Cesium.ArcGISTiledElevationTerrainProvider(options)
  }

  /**
   * Create vr terrain
   * @param options
   * @returns {module:cesium.VRTheWorldTerrainProvider}
   */
  static createVRTerrain(options) {
    return new Cesium.VRTheWorldTerrainProvider(options)
  }

  /**
   * Create Terrain
   * @param type
   * @param options
   * @returns {any}
   */
  static createTerrain(type, options) {
    let terrain = undefined
    switch (type) {
      case TerrainType.NONE:
        terrain = this.createEllipsoidTerrain(options)
        break
      case TerrainType.XYZ:
        terrain = this.createUrlTerrain(options)
        break
      case TerrainType.GOOGLE:
        terrain = this.createGoogleTerrain(options)
        break
      case TerrainType.ARCGIS:
        terrain = this.createArcgisTerrain(options)
        break
      case TerrainType.VR:
        terrain = this.createVRTerrain(options)
        break
      default:
        break
    }
    return terrain
  }
}

export default TerrainFactory
