content: /**
   //  AAOptionsConstructor.java
   //  AAChartCore
   //
   //  Created by AnAn on 2018/12/08.
   //  Copyright © 2018年 An An. All rights reserved.
   /**
   * ◉◉◉◉◉◉◉◉◉◉◉◉◉◉◉◉◉◉◉ ...... SOURCE CODE ......◉◉◉◉◉◉◉◉◉◉◉◉◉◉◉◉◉◉◉
   * ◉◉◉...................................................       ◉◉◉
   * ◉◉◉   https://github.com/AAChartModel/AAChartCore            ◉◉◉
   * ◉◉◉   https://github.com/AAChartModel/AAChartCore-Kotlin     ◉◉◉
   * ◉◉◉...................................................       ◉◉◉
   * ◉◉◉◉◉◉◉◉◉◉◉◉◉◉◉◉◉◉◉ ...... SOURCE CODE ......◉◉◉◉◉◉◉◉◉◉◉◉◉◉◉◉◉◉◉
   */
  
  /**
  
   * -------------------------------------------------------------------------------
   *
   *  🌕 🌖 🌗 🌘  ❀❀❀   WARM TIPS!!!   ❀❀❀ 🌑 🌒 🌓 🌔
   *
   * Please contact me on GitHub,if there are any problems encountered in use.
   * GitHub Issues : https://github.com/AAChartModel/AAChartCore/issues
   * -------------------------------------------------------------------------------
   * And if you want to contribute for this project, please contact me as well
   * GitHub        : https://github.com/AAChartModel
   * StackOverflow : https://stackoverflow.com/users/7842508/codeforu
   * JianShu       : http://www.jianshu.com/u/f1e6753d4254
   * SegmentFault  : https://segmentfault.com/u/huanghunbieguan
   *
   * -------------------------------------------------------------------------------
  
   */
  
  
  package com.github.AAChartModel.AAChartCore.AAChartCreator;
  
  import com.github.AAChartModel.AAChartCore.AAChartEnum.AAChartAnimationType;
  import com.github.AAChartModel.AAChartCore.AAChartEnum.AAChartSymbolStyleType;
  import com.github.AAChartModel.AAChartCore.AAChartEnum.AAChartType;
  import com.github.AAChartModel.AAChartCore.AAOptionsModel.AAAnimation;
  import com.github.AAChartModel.AAChartCore.AAOptionsModel.AABar;
  import com.github.AAChartModel.AAChartCore.AAOptionsModel.AAChart;
  import com.github.AAChartModel.AAChartCore.AAOptionsModel.AAColumn;
  import com.github.AAChartModel.AAChartCore.AAOptionsModel.AAColumnrange;
  import com.github.AAChartModel.AAChartCore.AAOptionsModel.AADataLabels;
  import com.github.AAChartModel.AAChartCore.AAOptionsModel.AAItemStyle;
  import com.github.AAChartModel.AAChartCore.AAOptionsModel.AALabels;
  import com.github.AAChartModel.AAChartCore.AAOptionsModel.AALegend;
  import com.github.AAChartModel.AAChartCore.AAOptionsModel.AAMarker;
  import com.github.AAChartModel.AAChartCore.AAOptionsModel.AAOptions;
  import com.github.AAChartModel.AAChartCore.AAOptionsModel.AAPie;
  import com.github.AAChartModel.AAChartCore.AAOptionsModel.AAPlotOptions;
  import com.github.AAChartModel.AAChartCore.AAOptionsModel.AASeries;
  import com.github.AAChartModel.AAChartCore.AAOptionsModel.AAStyle;
  import com.github.AAChartModel.AAChartCore.AAOptionsModel.AASubtitle;
  import com.github.AAChartModel.AAChartCore.AAOptionsModel.AATitle;
  import com.github.AAChartModel.AAChartCore.AAOptionsModel.AATooltip;
  import com.github.AAChartModel.AAChartCore.AAOptionsModel.AAXAxis;
  import com.github.AAChartModel.AAChartCore.AAOptionsModel.AAYAxis;
  import com.github.AAChartModel.AAChartCore.AATools.AAColor;
  
  public class AAOptionsConstructor
  {
      public static AAOptions configureChartOptions (
              AAChartModel aaChartModel
      ) {
          AAChart aaChart = new AAChart()
                  .type(aaChartModel.chartType) //绘图类型
                  .inverted(aaChartModel.inverted) //设置是否反转坐标轴，使X轴垂直，Y轴水平。 如果值为 true，则 x 轴默认是 倒置 的。 如果图表中出现条形图系列，则会自动反转
                  .backgroundColor(aaChartModel.backgroundColor) //设置图表的背景色(包含透明度的设置)
                  .pinchType(aaChartModel.zoomType) //设置手势缩放方向
                  .panning(true) //设置手势缩放后是否可平移
                  .polar(aaChartModel.polar) //是否极化图表(开启极坐标模式)
                  .margin(aaChartModel.margin) //图表边距
                  .scrollablePlotArea(aaChartModel.scrollablePlotArea)
                  ;
  
          AATitle aaTitle = new AATitle()
                  .text(aaChartModel.title) //标题文本内容
                  .style(aaChartModel.titleStyle)
                  ;
  
          AASubtitle aaSubtitle = new AASubtitle()
                  .text(aaChartModel.subtitle) //副标题内容
                  .align(aaChartModel.subtitleAlign) //图表副标题文本水平对齐方式。可选的值有 “left”，”center“和“right”。 默认是：center.
                  .style(aaChartModel.subtitleStyle)
                  ;
  
          AATooltip aaTooltip = new AATooltip()
                  .enabled(aaChartModel.tooltipEnabled) //启用浮动提示框
                  .shared(true) //多组数据共享一个浮动提示框
                  .valueSuffix(aaChartModel.tooltipValueSuffix) //浮动提示框的单位名称后缀
                  ;
  
          AAPlotOptions aaPlotOptions = new AAPlotOptions()
                  .series(new AASeries()
                          .stacking(aaChartModel.stacking) //设置是否百分比堆叠显示图形
                  )
                  ;
  
          if (!aaChartModel.animationType.equals(AAChartAnimationType.Linear)) {
              aaPlotOptions.series.animation((new AAAnimation()
                      .easing(aaChartModel.animationType)
                      .duration(aaChartModel.animationDuration)
              ));
          }
  
          configureAAPlotOptionsMarkerStyle(aaChartModel,aaPlotOptions);
          configureAAPlotOptionsDataLabels(aaPlotOptions,aaChartModel);
  
          AALegend aaLegend = new AALegend()
                  .enabled(aaChartModel.legendEnabled) //是否显示 legend
                  .itemStyle(new AAItemStyle()
                          .color(aaChartModel.axesTextColor))
                  ;
  
          AAOptions aaOptions = new AAOptions()
                  .chart(aaChart)
                  .title(aaTitle)
                  .subtitle(aaSubtitle)
                  .tooltip(aaTooltip)
                  .plotOptions(aaPlotOptions)
                  .legend(aaLegend)
                  .series(aaChartModel.series)
                  .colors(aaChartModel.colorsTheme) //设置颜色主题
                  .clickEventEnabled(aaChartModel.clickEventEnabled) //设置点击事件
                  .touchEventEnabled(aaChartModel.touchEventEnabled) //设置触摸(手指掠过)事件
                  ;
  
          configureAxisContentAndStyle(aaOptions,aaChartModel);
  
          return aaOptions;
      }
  
      private static void configureAAPlotOptionsMarkerStyle (
              AAChartModel aaChartModel,
              AAPlotOptions aaPlotOptions
      ) {
          String aaChartType = aaChartModel.chartType;
          //数据点标记相关配置，只有线性图(折线图、曲线图、折线区域填充图、曲线区域填充图、散点图、折线范围填充图、曲线范围填充图、多边形图)才有数据点标记
          switch (aaChartType) {
              case AAChartType.Area:
              case AAChartType.Areaspline:
              case AAChartType.Line:
              case AAChartType.Spline:
              case AAChartType.Scatter:
              case AAChartType.Arearange:
              case AAChartType.Areasplinerange:
              case AAChartType.Polygon:
                  AAMarker aaMarker = new AAMarker()
                          .radius(aaChartModel.markerRadius) //曲线连接点半径，默认是4
                          .symbol(aaChartModel.markerSymbol); //曲线点类型："circle", "square", "diamond", "triangle","triangle-down"，默认是"circle"
  
                  if (aaChartModel.markerSymbolStyle.equals(AAChartSymbolStyleType.InnerBlank)) {
                      aaMarker.fillColor(AAColor.White) //点的填充色(用来设置折线连接点的填充色)
                              .lineWidth(2f) //外沿线的宽度(用来设置折线连接点的轮廓描边的宽度)
                              .lineColor(""); //外沿线的颜色(用来设置折线连接点的轮廓描边颜色，当值为空字符串时，默认取数据点或数据列的颜色)
                  } else if (aaChartModel.markerSymbolStyle.equals(AAChartSymbolStyleType.BorderBlank)) {
                      aaMarker.lineWidth(2f)
                              .lineColor(aaChartModel.backgroundColor);
                  }
                  AASeries aaSeries = aaPlotOptions.series;
                  aaSeries.marker(aaMarker);
  
                  break;
          }
      }
  
  
      private static void configureAAPlotOptionsDataLabels (
              AAPlotOptions aaPlotOptions,
              AAChartModel aaChartModel
      ) {
          String aaChartType = aaChartModel.chartType;
  
          AADataLabels aaDataLabels = new AADataLabels()
                  .enabled(aaChartModel.dataLabelsEnabled);
          if (aaChartModel.dataLabelsEnabled) {
              aaDataLabels
                      .style(aaChartModel.dataLabelsStyle);
          }
  
          switch (aaChartType) {
              case AAChartType.Column:
                  AAColumn aaColumn = new AAColumn()
                          .borderWidth(0f)
                          .borderRadius(aaChartModel.borderRadius);
                  if (aaChartModel.polar) {
                      aaColumn.pointPadding(0f)
                              .groupPadding(0.005f);
                  }
                  aaPlotOptions.column(aaColumn);
                  break;
              case AAChartType.Bar:
                  AABar aaBar = new AABar()
                          .borderWidth(0f)
                          .borderRadius(aaChartModel.borderRadius)
                          ;
                  if (aaChartModel.polar) {
                      aaBar.pointPadding(0f)
                              .groupPadding(0.005f);
                  }
                  aaPlotOptions.bar(aaBar);
                  break;
              case AAChartType.Pie:
                  AAPie aaPie = new AAPie()
                          .allowPointSelect(true)
                          .cursor("pointer")
                          .showInLegend(true);
                  if (aaChartModel.dataLabelsEnabled) {
                      aaDataLabels.format("<b>{point.name}</b>: {point.percentage:.1f} %");
                  }
                  aaPlotOptions.pie(aaPie);
                  break;
              case AAChartType.Columnrange:
                  AAColumnrange aaColumnrange = new AAColumnrange()
                          .borderRadius(0f) //The color of the border surrounding each column or bar
                          .borderWidth(0f) //The corner radius of the border surrounding each column or bar. default：0
                          ;
                  aaPlotOptions.columnrange(aaColumnrange);
                  break;
          }
          aaPlotOptions.series.dataLabels(aaDataLabels);
  
      }
  
      private static void configureAxisContentAndStyle (
              AAOptions aaOptions,
              AAChartModel aaChartModel
      ) {
          String aaChartType = aaChartModel.chartType;
          //x 轴和 Y 轴的相关配置,扇形图、金字塔图和漏斗图则不需要设置 X 轴和 Y 轴的相关内容
          switch (aaChartType) {
              case AAChartType.Column:
              case AAChartType.Bar:
              case AAChartType.Area:
              case AAChartType.Areaspline:
              case AAChartType.Line:
              case AAChartType.Spline:
              case AAChartType.Scatter:
              case AAChartType.Bubble:
              case AAChartType.Columnrange:
              case AAChartType.Arearange:
              case AAChartType.Areasplinerange:
              case AAChartType.Boxplot:
              case AAChartType.Waterfall:
              case AAChartType.Polygon:
              case AAChartType.Gauge:
                  if (!aaChartType.equals(AAChartType.Gauge)) {
                      Boolean aaXAxisLabelsEnabled = aaChartModel.xAxisLabelsEnabled;
                      AALabels aaXAxisLabels = new AALabels()
                              .enabled(aaXAxisLabelsEnabled);//设置 x 轴是否显示文字
                      if (aaXAxisLabelsEnabled) {
                          aaXAxisLabels.style(new AAStyle()
                                  .color(aaChartModel.axesTextColor));
                      }
  
                      AAXAxis aaXAxis = new AAXAxis()
                              .labels(aaXAxisLabels) //设置 x 轴是否显示文字
                              .reversed(aaChartModel.xAxisReversed)
                              .gridLineWidth(aaChartModel.xAxisGridLineWidth) //x轴网格线宽度
                              .categories(aaChartModel.categories)
                              .visible(aaChartModel.xAxisVisible) //x轴是否可见
                              .tickInterval(aaChartModel.xAxisTickInterval);//x轴坐标点间隔数
  
                      aaOptions.xAxis(aaXAxis);
                  }
  
                  Boolean aaYAxisLabelsEnabled = aaChartModel.yAxisLabelsEnabled;
                  AALabels aaYAxisLabels = new AALabels()
                          .enabled(aaChartModel.yAxisLabelsEnabled);
                  if (aaYAxisLabelsEnabled) {
                      aaYAxisLabels.style(new AAStyle()
                              .color(aaChartModel.axesTextColor));
                  }
  
                  AAYAxis aaYAxis = new AAYAxis()
                          .labels(aaYAxisLabels) //设置 y 轴是否显示数字
                          .min(aaChartModel.yAxisMin) //设置 y 轴最小值,最小值等于零就不能显示负值了
                          .max(aaChartModel.yAxisMax) //y轴最大值
                          .allowDecimals(aaChartModel.yAxisAllowDecimals) //是否允许显示小数
                          .reversed(aaChartModel.yAxisReversed)
                          .gridLineWidth(aaChartModel.yAxisGridLineWidth) //y轴网格线宽度
                          .title(new AATitle()
                                  .text(aaChartModel.yAxisTitle)
                                  .style(new AAStyle()
                                          .color(aaChartModel.axesTextColor)))
                          .lineWidth(aaChartModel.yAxisLineWidth) //设置 y轴轴线的宽度,为0即是隐藏 y轴轴线
                          .visible(aaChartModel.yAxisVisible);
  
                  aaOptions.yAxis(aaYAxis);
                  break;
          }
      }
  
  
  }
  