import { Http } from "../Http";
import { ArrayHelper, AstHelper } from "@gvol-org/geovis-brain-core";
import { PrintObject } from "../models/PrintObject";
import { Chart } from "./Chart";
import * as echarts from "echarts";

/**
 * @class Chart.array
 * @since ui.Chart
 */
export class array {
  static chart: Chart;
  constructor() { }

  // /**
  //  *   通过制定数据集合绘制图表;
  //  * @param {List} [array]  y轴数据列表,可以是一维列表、二维数据
  //  * @param {Number} [axis] x轴的方向,数据方向,可以是0、1,根据传入的array数据不同而不同
  //  * @param {List} [xLabels] x轴的数据列表
  //  * @return ui.Chart
  //  * @tutorial ui.Chart.array
  //  */
  // static  values_expressions(array: any, axis: number, xLabels?: any) {
  //   let awaitCount=0;
  //   let resCount=0;
  //   if (array instanceof PrintObject) {
  //     //表达式调用接口拿到数据
  //     awaitCount++;
  //     let codeContent = "print(" + array['expressions'] + ");";
  //      Http.getPrintRequest_expressions(codeContent).then(response => {
  //        console.log("chart参数1", response);
  //        Http.responseSubject$.next(null);
  //        resCount++;
  //        if (response) {
  //         array.chart.values =[response.prints[0]];
  //        }
  //        if (awaitCount==resCount) {
  //         array.chart.cht.hideLoading();
  //         if (array.chart.xLabels) {
  //         //   let labels:any=  Array.from(new Set(array.chart.xLabels));
  //         //   if (labels.length==array.chart.xLabels) {
  //         //     array.chart.setChartType(array.chart.chartType);
  //         //     return;
  //         //   }

  //         // let series= array.chart.getSeries(labels);
  //         //   array.chart.xLabels=labels;
  //         //   array.chart.values=series;
  //           array.chart.setChartType(array.chart.chartType);
  //         }
  //        }
  //     });
  //     array=[[]];
  //   }
  //   if (xLabels instanceof PrintObject) {
  //     awaitCount++;
  //     let codeContent = "print(" + xLabels['expressions'] + ");";
  //     Http.getPrintRequest_expressions(codeContent).then(response => {
  //        console.log("chart参数2", response);
  //        Http.responseSubject$.next(null);
  //        resCount++;
  //        if (response) {
  //         array.chart.xLabels =response.prints[0];
  //        }
  //        if (awaitCount==resCount) {

  //         array.chart.cht.hideLoading();
  //         if (array.chart.xLabels) {
  //         //  let labels:any=  Array.from( new Set(array.chart.xLabels));
  //         //   if (labels.length==array.chart.xLabels) {
  //         //     array.chart.setChartType(array.chart.chartType);
  //         //     return;
  //         //   }
  //         //   let series= array.chart.getSeries(labels);
  //         //   array.chart.xLabels=labels;
  //         //   array.chart.values=series;
  //           array.chart.setChartType(array.chart.chartType);
  //         }

  //        }
  //     });
  //     xLabels=[]
  //   }


  //   array.chart = new Chart();
  //   var myChart = echarts.init( array.chart.el as HTMLElement);
  //   array.chart.cht = myChart;
  //   array.chart.values = array;
  //   array.chart.axis = axis;
  //   array.chart.xLabels = xLabels;
  //   array.chart.setChartType(array.chart.chartType);
  //   if (awaitCount>0) {
  //     myChart.showLoading({
  //       text: '图表生成中...',
  //       color: '#ccc',
  //       textColor: '#000',
  //       maskColor: 'rgba(255, 255, 255, 0.3)',
  //       zlevel: 0,
  //     });
  //   }
  //   return array.chart;
  // }


  /**
   *   通过制定数据集合绘制图表;
   * @param {List} [array]  y轴数据列表,可以是一维列表、二维数据
   * @param {Number} [axis] x轴的方向,数据方向,可以是0、1,根据传入的array数据不同而不同
   * @param {List} [xLabels] x轴的数据列表
   * @return ui.Chart
   * @tutorial ui.Chart.array
   */
  static values(array: any, axis: number, xLabels?: any) {
    let awaitCount = 0;
    let resCount = 0;
    if (array instanceof PrintObject) {
      if (array["order"]) {
        array['chain'] = AstHelper.relativeChain(array["order"]);
      }
      let content = {
        type: 'value',
        chain: array['chain']
      };
      if ((window as any).astCallback) {
        (window as any).astCallback(content);
      }
      //表达式调用接口拿到数据
      awaitCount++;
      if (typeof process === 'undefined') {
        //浏览器环境,非node环境
        Http.getPrintRequest(array['chain']).then(response => {
          console.log("chart参数1", response);
          Http.responseSubject$.next(null);
          resCount++;
          if (response && response.data.status == 'success') {
            let arrVal = response.data.detail;
            let depth = ArrayHelper.getArrayDepth(arrVal);
            console.log("数组深度", depth);
            if (depth == 1) {
              arrVal = [arrVal];
            }
            array.chart.values = arrVal;
          }
          if (awaitCount == resCount) {
            array.chart.cht.hideLoading();
            if (array.chart.xLabels) {
              //   let labels:any=  Array.from(new Set(array.chart.xLabels));
              //   if (labels.length==array.chart.xLabels) {
              //     array.chart.setChartType(array.chart.chartType);
              //     return;
              //   }

              // let series= array.chart.getSeries(labels);
              //   array.chart.xLabels=labels;
              //   array.chart.values=series;
              array.chart.setChartType(array.chart.chartType);
            }
          }
        });
      }
      array = [[]];
    }
    if (xLabels instanceof PrintObject) {
      awaitCount++;
      if (xLabels["order"]) {
        xLabels['chain'] = AstHelper.relativeChain(xLabels["order"]);
      }
      let content = {
        type: 'value',
        chain: xLabels['chain']
      };
      if ((window as any).astCallback) {
        (window as any).astCallback(content);
      }
      if (typeof process === 'undefined') {
        //浏览器环境,非node环境
        Http.getPrintRequest(xLabels['chain']).then(response => {
          console.log("chart参数2", response);
          Http.responseSubject$.next(null);
          resCount++;
          if (response && response.data.status == 'success') {
            array.chart.xLabels = response.data.detail;
          }
          if (awaitCount == resCount) {

            array.chart.cht.hideLoading();
            if (array.chart.xLabels) {
              //  let labels:any=  Array.from( new Set(array.chart.xLabels));
              //   if (labels.length==array.chart.xLabels) {
              //     array.chart.setChartType(array.chart.chartType);
              //     return;
              //   }
              //   let series= array.chart.getSeries(labels);
              //   array.chart.xLabels=labels;
              //   array.chart.values=series;
              array.chart.setChartType(array.chart.chartType);
            }

          }
        });
      }
      xLabels = []
    }


    array.chart = new Chart();
    if (typeof process === 'undefined') {
      var myChart = echarts.init(array.chart.el as HTMLElement);
      array.chart.cht = myChart;
      array.chart.values = array;
      array.chart.axis = axis;
      array.chart.xLabels = xLabels;
      array.chart.setChartType(array.chart.chartType);
      if (awaitCount > 0) {
        myChart.showLoading({
          text: '图表生成中...',
          color: '#ccc',
          textColor: '#000',
          maskColor: 'rgba(255, 255, 255, 0.3)',
          zlevel: 0,
        });
      }
    }
    return array.chart;
  }
}