'use strict';

Object.defineProperty(exports, '__esModule', { value: true });

var clazz = require('../util/clazz.js');
var helper = require('./helper.js');
var util = require('../../../../../zrender@6.0.0/node_modules/zrender/lib/core/util.js');
var _break = require('./break.js');

var Scale = /** @class */function () {
  function Scale(setting) {
    this._calculator = new helper.ScaleCalculator();
    this._setting = setting || {};
    this._extent = [Infinity, -Infinity];
    var scaleBreakHelper = _break.getScaleBreakHelper();
    if (scaleBreakHelper) {
      this._brkCtx = scaleBreakHelper.createScaleBreakContext();
      this._brkCtx.update(this._extent);
    }
  }
  Scale.prototype.getSetting = function (name) {
    return this._setting[name];
  };
  /**
   * [CAVEAT]: It should not be overridden!
   */
  Scale.prototype._innerUnionExtent = function (other) {
    var extent = this._extent;
    // Considered that number could be NaN and should not write into the extent.
    this._innerSetExtent(other[0] < extent[0] ? other[0] : extent[0], other[1] > extent[1] ? other[1] : extent[1]);
  };
  /**
   * Set extent from data
   */
  Scale.prototype.unionExtentFromData = function (data, dim) {
    this._innerUnionExtent(data.getApproximateExtent(dim));
  };
  /**
   * Get a new slice of extent.
   * Extent is always in increase order.
   */
  Scale.prototype.getExtent = function () {
    return this._extent.slice();
  };
  Scale.prototype.setExtent = function (start, end) {
    this._innerSetExtent(start, end);
  };
  /**
   * [CAVEAT]: It should not be overridden!
   */
  Scale.prototype._innerSetExtent = function (start, end) {
    var thisExtent = this._extent;
    if (!isNaN(start)) {
      thisExtent[0] = start;
    }
    if (!isNaN(end)) {
      thisExtent[1] = end;
    }
    this._brkCtx && this._brkCtx.update(thisExtent);
  };
  /**
   * Prerequisite: Scale#parse is ready.
   */
  Scale.prototype.setBreaksFromOption = function (breakOptionList) {
    var scaleBreakHelper = _break.getScaleBreakHelper();
    if (scaleBreakHelper) {
      this._innerSetBreak(scaleBreakHelper.parseAxisBreakOption(breakOptionList, util.bind(this.parse, this)));
    }
  };
  /**
   * [CAVEAT]: It should not be overridden!
   */
  Scale.prototype._innerSetBreak = function (parsed) {
    if (this._brkCtx) {
      this._brkCtx.setBreaks(parsed);
      this._calculator.updateMethods(this._brkCtx);
      this._brkCtx.update(this._extent);
    }
  };
  /**
   * [CAVEAT]: It should not be overridden!
   */
  Scale.prototype._innerGetBreaks = function () {
    return this._brkCtx ? this._brkCtx.breaks : [];
  };
  /**
   * Do not expose the internal `_breaks` unless necessary.
   */
  Scale.prototype.hasBreaks = function () {
    return this._brkCtx ? this._brkCtx.hasBreaks() : false;
  };
  Scale.prototype._getExtentSpanWithBreaks = function () {
    return this._brkCtx && this._brkCtx.hasBreaks() ? this._brkCtx.getExtentSpan() : this._extent[1] - this._extent[0];
  };
  /**
   * If value is in extent range
   */
  Scale.prototype.isInExtentRange = function (value) {
    return this._extent[0] <= value && this._extent[1] >= value;
  };
  /**
   * When axis extent depends on data and no data exists,
   * axis ticks should not be drawn, which is named 'blank'.
   */
  Scale.prototype.isBlank = function () {
    return this._isBlank;
  };
  /**
   * When axis extent depends on data and no data exists,
   * axis ticks should not be drawn, which is named 'blank'.
   */
  Scale.prototype.setBlank = function (isBlank) {
    this._isBlank = isBlank;
  };
  return Scale;
}();
clazz.enableClassManagement(Scale);

exports.default = Scale;
