    import BaseRenderer from './BaseRenderer'
    import { defaultValue } from '../../util'
    import { Zondy } from '../../base'
    import HeatmapColorStop from './support/HeatmapColorStop'
    import { RendererType } from '../../base/enum'
    /**
     * 热力图渲染器
     * @class HeatmapRenderer
     * @extends BaseRenderer
     * @moduleEX RendererModule
     * @param {Object} options 构造参数
     * @param {String} [options.type]
     * @param {Array<HeatmapColorStop>} [options.colorStops] 描述渲染器色带的对象数组。像素的密度值与渲染器的 maxDensity 的比率映射到相应的颜色。例如  { color: [133, 193, 200, 0], ratio: 0 }
     * @param {Number} [options.radius] 热力图数据点半径，单位像素。
     * @param {String} [options.field] 要素字段名称，用于指定数据的热力值，优先级高于valueExpression.
     * @param {String} [options.valueExpression] 字段表达式，用于指定数据的热力值，会覆盖field
     * @param {String} [options.valueExpressionTitle] 字段表达式标题
     * @param {Number} [options.maxDataValue] 热力图最大数据范围，热力图内点的权重值大于此数，不进行渲染。
     * @param {Number} [options.minDataValue] 热力图最小数据范围，热力图内点的权重值小于此数，不进行渲染。
     */
    class HeatmapRenderer extends BaseRenderer {
      constructor(options) {
        super(options)
        options = defaultValue(options, {})
        /**
         * 渲染器类型，默认为'heatmap'
         * @member {String} HeatmapRenderer.prototype.type
         */
        this.type = RendererType.heatmap
        /**
         * 描述渲染器色带的对象数组。像素的密度值与渲染器的 maxDensity 的比率映射到相应的颜色。例如  { color: [133, 193, 200, 0], ratio: 0 }
         * @member {Array<HeatmapColorStop>} HeatmapRenderer.prototype.colorStops
         */
        this.colorStops = defaultValue(options.colorStops, []).map((v) =>
          HeatmapColorStop.fromJSON(v)
        )
        /**
         * 热力图数据点半径，单位像素。
         * @member {Number} HeatmapRenderer.prototype.radius
         */
        this.radius = options.radius
        /**
         * 要素字段名称，用于指定数据的热力值，优先级高于valueExpression.
         * @member {String} HeatmapRenderer.prototype.field
         */
        this.field = options.field
        /**
         * 字段表达式，用于指定数据的热力值。
         * @member {String} HeatmapRenderer.prototype.valueExpression
         */
        this.valueExpression = options.valueExpression
        /**
         * 字段表达式标题
         * @member {String} HeatmapRenderer.prototype.valueExpressionTitle
         */
        this.valueExpressionTitle = options.valueExpressionTitle
        /**
         * 热力图最大数据范围，热力图内点的权重值大于此数，不进行渲染。
         * @member {Number} HeatmapRenderer.prototype.maxDataValue
         */
        this.maxDataValue = options.maxDataValue
        /**
         * 热力图最小数据范围，热力图内点的权重值小于此数，不进行渲染。
         * @member {Number} HeatmapRenderer.prototype.minDataValue
         */
        this.minDataValue = options.minDataValue
      }

      /**
       * 通过json构造HeatmapRenderer对象
       * @param {Object} json json对象
       * @return {HeatmapRenderer} HeatmapRenderer实例
       */
      static fromJSON(json) {
        json = defaultValue(json, {})
        return new HeatmapRenderer(json)
      }

      /**
       * 导出json对象
       * @return {Object} json对象
       */
      toJSON() {
        const json = super.toJSON()
        json.type = this.type
        json.colorStops = this.colorStops.map((v) => {
          return v.toJSON()
        })
        json.radius = this.radius
        json.field = this.field
        json.valueExpression = this.valueExpression
        json.valueExpressionTitle = this.valueExpressionTitle
        json.maxDataValue = this.maxDataValue
        json.minDataValue = this.minDataValue
        return json
      }

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

    Zondy.Renderer.HeatmapRenderer = HeatmapRenderer
    export default HeatmapRenderer