'use strict';

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

var tslib_es6 = require('../../../../../../tslib@2.3.0/node_modules/tslib/tslib.es6.js');
var util = require('../../../../../../zrender@6.0.0/node_modules/zrender/lib/core/util.js');
var AxisBuilder = require('./AxisBuilder.js');
var graphic = require('../../util/graphic.js');
var singleAxisHelper = require('../../coord/single/singleAxisHelper.js');
var AxisView = require('./AxisView.js');
var axisSplitHelper = require('./axisSplitHelper.js');
var axisBreakHelper = require('./axisBreakHelper.js');
var Group = require('../../../../../../zrender@6.0.0/node_modules/zrender/lib/graphic/Group.js');
var Line = require('../../../../../../zrender@6.0.0/node_modules/zrender/lib/graphic/shape/Line.js');

var selfBuilderAttrs = ['splitArea', 'splitLine', 'breakArea'];
var SingleAxisView = /** @class */function (_super) {
  tslib_es6.__extends(SingleAxisView, _super);
  function SingleAxisView() {
    var _this = _super !== null && _super.apply(this, arguments) || this;
    _this.type = SingleAxisView.type;
    _this.axisPointerClass = 'SingleAxisPointer';
    return _this;
  }
  SingleAxisView.prototype.render = function (axisModel, ecModel, api, payload) {
    var group = this.group;
    group.removeAll();
    var oldAxisGroup = this._axisGroup;
    this._axisGroup = new Group.default();
    var layout = singleAxisHelper.layout(axisModel);
    var axisBuilder = new AxisBuilder.default(axisModel, api, layout);
    axisBuilder.build();
    group.add(this._axisGroup);
    group.add(axisBuilder.group);
    util.each(selfBuilderAttrs, function (name) {
      if (axisModel.get([name, 'show'])) {
        axisElementBuilders[name](this, this.group, this._axisGroup, axisModel, api);
      }
    }, this);
    graphic.groupTransition(oldAxisGroup, this._axisGroup, axisModel);
    _super.prototype.render.call(this, axisModel, ecModel, api, payload);
  };
  SingleAxisView.prototype.remove = function () {
    axisSplitHelper.rectCoordAxisHandleRemove(this);
  };
  SingleAxisView.type = 'singleAxis';
  return SingleAxisView;
}(AxisView.default);
var axisElementBuilders = {
  splitLine: function (axisView, group, axisGroup, axisModel, api) {
    var axis = axisModel.axis;
    if (axis.scale.isBlank()) {
      return;
    }
    var splitLineModel = axisModel.getModel('splitLine');
    var lineStyleModel = splitLineModel.getModel('lineStyle');
    var lineColors = lineStyleModel.get('color');
    lineColors = lineColors instanceof Array ? lineColors : [lineColors];
    var lineWidth = lineStyleModel.get('width');
    var gridRect = axisModel.coordinateSystem.getRect();
    var isHorizontal = axis.isHorizontal();
    var splitLines = [];
    var lineCount = 0;
    var ticksCoords = axis.getTicksCoords({
      tickModel: splitLineModel,
      breakTicks: 'none',
      pruneByBreak: 'preserve_extent_bound'
    });
    var p1 = [];
    var p2 = [];
    for (var i = 0; i < ticksCoords.length; ++i) {
      var tickCoord = axis.toGlobalCoord(ticksCoords[i].coord);
      if (isHorizontal) {
        p1[0] = tickCoord;
        p1[1] = gridRect.y;
        p2[0] = tickCoord;
        p2[1] = gridRect.y + gridRect.height;
      } else {
        p1[0] = gridRect.x;
        p1[1] = tickCoord;
        p2[0] = gridRect.x + gridRect.width;
        p2[1] = tickCoord;
      }
      var line = new Line.default({
        shape: {
          x1: p1[0],
          y1: p1[1],
          x2: p2[0],
          y2: p2[1]
        },
        silent: true
      });
      graphic.subPixelOptimizeLine(line.shape, lineWidth);
      var colorIndex = lineCount++ % lineColors.length;
      splitLines[colorIndex] = splitLines[colorIndex] || [];
      splitLines[colorIndex].push(line);
    }
    var lineStyle = lineStyleModel.getLineStyle(['color']);
    for (var i = 0; i < splitLines.length; ++i) {
      group.add(graphic.mergePath(splitLines[i], {
        style: util.defaults({
          stroke: lineColors[i % lineColors.length]
        }, lineStyle),
        silent: true
      }));
    }
  },
  splitArea: function (axisView, group, axisGroup, axisModel, api) {
    axisSplitHelper.rectCoordAxisBuildSplitArea(axisView, axisGroup, axisModel, axisModel);
  },
  breakArea: function (axisView, group, axisGroup, axisModel, api) {
    var axisBreakHelper$1 = axisBreakHelper.getAxisBreakHelper();
    var scale = axisModel.axis.scale;
    if (axisBreakHelper$1 && scale.type !== 'ordinal') {
      axisBreakHelper$1.rectCoordBuildBreakAxis(group, axisView, axisModel, axisModel.coordinateSystem.getRect(), api);
    }
  }
};

exports.default = SingleAxisView;
