import Zondy from './Zondy'
import { defaultValue, isNull } from '../util'
/**
 * 统计信息结构
 * @class OutStatistic
 * @param {Object} options 构造参数
 * @param {StatisticType} [options.statisticType = 无] 统计方法类型,必传
 * @param {String} [options.onStatisticField = 无] 要统计的字段,仅支持统计一个字段,必传
 * @param {String} [options.outStatisticFieldName = 无] 输出统计结果时,要统计的字段的别名
 * @example
 * //创建统计信息结构对象
 * let OutStatistic = new Zondy.OutStatistic({
 *   //统计最大值
 *   statisticType: StatisticType.functionMax,
 *   //要统计的字段
 *   onStatisticField: 'GDP2011',
 *   //要统计的字段的别名
 *   outStatisticFieldName: 'anotherName'
 * });
 */
class OutStatistic {
  constructor(options) {
    options = defaultValue(options, {})
    /**
     * 统计方法类型
     * @member {String} OutStatistic.prototype.statisticType
     * */
    this.statisticType = defaultValue(options.statisticType, undefined)
    /**
     * 要统计的字段
     * @member {String} OutStatistic.prototype.onStatisticField
     * */
    this.onStatisticField = defaultValue(options.onStatisticField, undefined)
    /**
     * 输出统计结果时,要统计的字段的别名
     * @member {String} OutStatistic.prototype.outStatisticFieldName
     * */
    this.outStatisticFieldName = defaultValue(
      options.outStatisticFieldName,
      undefined
    )
    // 正确性校验
    if (isNull(this.statisticType)) {
      console.warn('statisticType不能为空!')
    }
    if (isNull(this.onStatisticField)) {
      console.warn('onStatisticField不能为空!')
    }
  }
  /**
   * @function OutStatistic.prototype.toString
   * @description 将对象转为字符串
   * @return Sting 转化后的字符串
   * @example
   * OutStatistic.toString();
   * //statisticType和onStatisticField存在
   * //字符串为:'{"statisticType": "FUNCTION_SUM","onStatisticField": "GDP2011"'
   * //statisticType、onStatisticField和outStatisticFieldName存在
   * //字符串为:'{"statisticType": "FUNCTION_SUM","onStatisticField": "GDP2011", "outStatisticFieldName":"test"}'
   */
  toString() {
    let str = ''
    // 确保statisticType和onStatisticField存在
    if (!isNull(this.statisticType) && !isNull(this.onStatisticField)) {
      // 字段别名存在
      if (!isNull(this.outStatisticFieldName)) {
        str += `{"statisticType":"${this.statisticType}","onStatisticField":"${this.onStatisticField}","outStatisticFieldName":"${this.outStatisticFieldName}"}`
      } else {
        str += `{"statisticType":"${this.statisticType}","onStatisticField":"${this.onStatisticField}"}`
      }
    }
    return str
  }
}
Zondy.OutStatistics = OutStatistic
export default OutStatistic