    import VisualVariable from './VisualVariable'
    import { defaultValue } from '../../../util'
    import VisualVariableType from '../../../base/enum/VisualVariableType'
    import SizeStop from './support/SizeStop'
    import { Zondy } from '../../../base'
    /**
     * size视觉变量
     * @class SizeVariable
     * @moduleEX RendererModule
     * @param {Object} options 初始化参数
     * @param {Number} [options.maxDataValue] 最大数据值,超过这个数值以最大size显示
     * @param {Number} [options.maxSize] 符号最大size
     * @param {Number} [options.minDataValue] 最小数据值，小于这个数值以最小size显示
     * @param {Number} [options.minSize] 符号最小size
     * @param {Array<SizeStop>} [options.stops] 颜色分段数组
     * @example
     * // 获取layer上renderer对象
     *  const renderer = layer.renderer
     * // 根据FID取值设置符号大小
     * // FID取值小于0时，设置符号大小为5
     * // FID取值大于300时 ，设置符号大小为20
     * // FID取值在0-300之间时，显示符号大小过渡值
     * // 设置size视觉变量方法一
     *  renderer.visualVariables = [{
              type: "size",
              field: "FID",
              minDataValue:0,
              maxDataValue:300,
              minSize:5,
              maxSize:20,
        }]
       // 设置size视觉变量方法二
      *  renderer.visualVariables = [
         {
              type: "size",
              valueExpression: "$feature.FID",
              stops:[
                {
                  size:5,
                  value:0
                },
                {
                  size:20,
                  value:300
                }
              ]
         }
      ]
     */
    class SizeVariable extends VisualVariable {
      constructor(options) {
        super(options)
        options = defaultValue(options, {})
        this.type = VisualVariableType.size
        /**
         * 最大数据值
         * @member {Number} SizeVariable.prototype.maxDataValue
         */
        this.maxDataValue = options.maxDataValue
        /**
         * 符号最大size
         * @member {Number} SizeVariable.prototype.maxSize
         */
        this.maxSize = options.maxSize
        /**
         * 最小数据值
         * @member {Number} SizeVariable.prototype.minDataValue
         */
        this.minDataValue = options.minDataValue
        /**
         * 符号最小size
         * @member {Number} SizeVariable.prototype.minSize
         */

        this.minSize = options.minSize
        /**
         * size分段数组
         * @member {Array<SizeStop>} SizeVariable.prototype.stops
         */
        this.stops = defaultValue(options.stops, [])
        this.stops = this.stops.map((v) => SizeStop.fromJSON(v))
      }

      /**
       * 通过json构造SizeVariable对象
       * @return {SizeVariable} json对象
       * */
      static fromJSON(json) {
        return new SizeVariable(json)
      }

      /**
       * 导出为json对象
       * @return {Object} json对象
       * */
      toJSON() {
        const json = super.toJSON()
        json.type = this.type
        json.minSize = this.minSize
        json.maxSize = this.maxSize
        json.minDataValue = this.minDataValue
        json.maxDataValue = this.maxDataValue
        json.normalizationField = this.normalizationField
        json.stops = this.stops.map((v) => v.toJSON())
        return json
      }

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

    Zondy.Renderer.VisualVariable.SizeVariable = SizeVariable
    export default SizeVariable