    import { defaultValue } from '../../../util'
    import { Symbol } from '../../../base/symbol'
    /**
     * 三维专题图-单值信息
     * @class UniqueValueInfo
     * @moduleEX RendererModule
     * @classdesc 三维专题图-单值信息
     * @param {Object} options 初始化参数
     * @param {String|Number} [options.value] 指定字段下的要素值，具有此值的要素将使用给定的符号可视化
     * @param {Symbol} [options.symbol] 符号，用来渲染指定要素
     * @param {String} [options.label] 标签，用来描述符号表示的值
     * @param {Boolean} [options.visible = true] 是否可视化单值信息
     */
    class UniqueValueInfo {
      constructor(options) {
        options = defaultValue(options, {})
        /**
         * 指定字段下的要素值，具有此值的要素将使用给定的符号可视化
         * @member {String|Number} UniqueValueInfo.prototype.value
         */
        this.value = options.value
        /**
         * 符号，用来渲染指定要素
         * @member {Symbol} UniqueValueInfo.prototype.symbol
         */
        this.symbol = Symbol.fromJSON(options.symbol)
        /**
         * 标签，用来描述符号表示的值
         * @member {String} UniqueValueInfo.prototype.label
         */
        this.label = defaultValue(options.label, null)
        /**
         * 描述信息
         * @member {String} UniqueValueInfo.prototype.description
         */
        this.description = defaultValue(options.description, null)
        /**
         * 是否可视化单值信息
         * @member {Boolean} UniqueValueInfo.prototype.visible
         */
        this.visible = defaultValue(options.visible, true)
      }

      /**
       * @description 将JSON格式的单值信息转换为JS对象
       * @param {UniqueValueInfo} 单值信息描述对象
       */
      static fromJSON(json) {
        json = defaultValue(json, {})
        return new UniqueValueInfo(json)
      }

      /**
       * 将JS对象转换为JSON格式
       * @returns {Object} 单值信息的实例化JSON
       */
      toJSON() {
        return {
          value: this.value,
          symbol: this.symbol.toJSON(),
          label: this.label,
          description: this.description,
          visible: this.visible
        }
      }

      /**
       * 克隆UniqueValueInfo对象
       * @return {UniqueValueInfo} 克隆后的UniqueValueInfo对象
       */
      clone() {
        return new UniqueValueInfo(this.toJSON())
      }
    }

    export default UniqueValueInfo