import { defaultValue, defined, SymbolType } from '@mapgis/webclient-common'
import CesiumPluginUtil from '../CesiumPluginUtil'

/**
 * @description 转换简单线符号为Cesium Graphics样式
 * @param {String} type 几何样式
 * @param {*} paintStyle graphics样式
 * @param {*} symbol 符号
 * @return {*}
 */
function convertSimpleLineSymbolToGraphicStyle(type, paintStyle, symbol) {
  const color = CesiumPluginUtil.convertColorToRgb(symbol.color)
  paintStyle['color'] = color

  if (symbol && defined(symbol.width)) {
    paintStyle['width'] = symbol.width
  }
  // 不支持线首尾角
  // 不支持线接角
  // 不支持线style
  // 无法设置marker
}

/**
 * @description 转换填充符号为Cesium Graphics样式
 * @param {String} type 几何样式
 * @param {*} paintStyle graphics样式
 * @param {*} symbol 符号
 * @return {*}
 */
function convertSimpleFillSymbolToGraphicStyle(type, paintStyle, symbol) {
  switch (type) {
    case 'rectangle': {
      paintStyle['color'] = CesiumPluginUtil.convertColorToRgb(symbol.color)
      // 无法设置区域边线
      // 无法设置区域边线透明度
      // 无法设置style
      break
    }
    case 'circle': {
      paintStyle['color'] = CesiumPluginUtil.convertColorToRgb(symbol.color)
      // 无法设置区域边线
      // 无法设置区域边线透明度
      // 无法设置style
      break
    }
    case 'polygon': {
      paintStyle['color'] = CesiumPluginUtil.convertColorToRgb(symbol.color)
      // 无法设置区域边线
      // 无法设置区域边线透明度
      // 无法设置style
      break
    }
    default: {
      paintStyle['color'] = CesiumPluginUtil.convertColorToRgb(symbol.color)
    }
  }
}
/**
 * @description 转换点符号为Cesium Graphics样式
 * @param {String} type 几何样式
 * @param {*} paintStyle graphics样式
 * @param {*} symbol 符号
 * @return {*}
 */
function convertSimpleMarkerSymbolToGraphicStyle(type, paintStyle, symbol) {
  /**
   * const pictureMarkerSymbol = new PictureMarkerSymbol({
        color: new Color(252, 100, 22, 1),
        angle: 90,
        xoffset: -1,
        yoffset: 5,
        height: 20,
        width: 30,
        url: "xxx",
        outline: new SimpleLineSymbol({
          color: new Color(255, 0, 0, 1),
          width: 2,
        }),
      });
   *
   */

  // 无法设置xoffset、yoffset
  paintStyle['color'] = CesiumPluginUtil.convertColorToRgb(symbol.color)
  if (defined(symbol.outline)) {
    const _paintStyle = {}
    convertSimpleLineSymbolToGraphicStyle(type, _paintStyle, symbol.outline)
    if (defined(_paintStyle['color'])) {
      paintStyle['outlineColor'] = _paintStyle['color']
    }

    if (defined(_paintStyle['width'])) {
      paintStyle['outlineWidth'] = _paintStyle['width']
    }
  }
  paintStyle['pixelSize'] = parseFloat(defaultValue(symbol['size'], 10))

  // 无法支持angle
  // 无法支持path
  // 无法支持style
}

/**
 * @description 转换点符号为Cesium Graphics样式
 * @param {String} type 几何样式
 * @param {*} paintStyle graphics样式
 * @param {*} symbol 符号
 * @return {*}
 */
function convertPictureMarkerSymbolToGraphicStyle(type, paintStyle, symbol) {
  /**
 *
  *  new Cesium.Graphic({
      //标绘类型
      type: 'billboard',
      //标绘位置
      positions: [Cesium.Cartesian3.fromDegrees(114.4052, 30.4630, 0)],
      //标绘样式
      style: {
          //广告牌图片URL
          image: 'http://192.168.82.89:8200/NoneSpatialData/image/icon.png',
          //广告牌宽度
          width: 64,
          //广告牌高度
          height: 64,
          //离地高度
          offsetHeight: 600
      }
  })
 *
 */

  paintStyle['color'] = CesiumPluginUtil.convertColorToRgb(symbol.color)
  if (defined(symbol.outline)) {
    const _paintStyle = {}
    convertSimpleLineSymbolToGraphicStyle(type, _paintStyle, symbol.outline)
    if (defined(_paintStyle['color'])) {
      paintStyle['outlineColor'] = _paintStyle['color']
    }

    if (defined(_paintStyle['width'])) {
      paintStyle['outlineWidth'] = _paintStyle['width']
    }
  }

  if (defined(symbol.height)) {
    paintStyle['height'] = symbol.height
  }

  if (defined(symbol.width)) {
    paintStyle['width'] = symbol.width
  }

  if (defined(symbol.url)) {
    paintStyle['image'] = symbol.url
  }

  // 无法设置xoffset、yoffset
  // 无法支持angle
  // 无法支持path
  // 无法支持style
}

class ConvertSymbolToGraphicStyle {
  constructor() {}

  /**
   * @description 转换为cesium graphic Style
   * @public
   * @param {*} symbol
   * @param {*} type
   * @return {*}
   */
  static convertSymbolToGraphicStyle(symbol, type) {
    const style = {}
    switch (symbol.type) {
      case SymbolType.marker: {
        convertSimpleMarkerSymbolToGraphicStyle(type, style, symbol)
        break
      }
      case SymbolType.pictureMarker: {
        convertPictureMarkerSymbolToGraphicStyle(type, style, symbol)
        break
      }
      case SymbolType.simpleLine: {
        convertSimpleLineSymbolToGraphicStyle(type, style, symbol)
        break
      }
      case SymbolType.simpleFill: {
        convertSimpleFillSymbolToGraphicStyle(type, style, symbol)
        break
      }
      default: {
        convertSimpleFillSymbolToGraphicStyle(type, style, symbol)
        break
      }
    }
    return style
  }
}
export default ConvertSymbolToGraphicStyle
