/**
 * echarts通用私有数据服务
 *
 * @desc echarts基于Canvas，纯Javascript图表库，提供直观，生动，可交互，可个性化定制的数据统计图表。
 * @author Kener (@Kener-林峰, kener.linfeng@gmail.com)
 *
 */
module.exports = function () {
  /**
   * 打包私有数据
   *
   * @param {shape} shape 修改目标
   * @param {Object} series
   * @param {number} seriesIndex
   * @param {number | Object} data
   * @param {number} dataIndex
   * @param {*=} special
   * @param {*=} special2
   */
  function pack(shape, series, seriesIndex, data, dataIndex, name, special, special2) {
    var value;

    if (typeof data != 'undefined') {
      value = data.value == null ? data : data.value;
    }

    shape._echartsData = {
      '_series': series,
      '_seriesIndex': seriesIndex,
      '_data': data,
      '_dataIndex': dataIndex,
      '_name': name,
      '_value': value,
      '_special': special,
      '_special2': special2
    };
    return shape._echartsData;
  }
  /**
   * 从私有数据中获取特定项
   * @param {shape} shape
   * @param {string} key
   */


  function get(shape, key) {
    var data = shape._echartsData;

    if (!key) {
      return data;
    }

    switch (key) {
      case 'series':
      case 'seriesIndex':
      case 'data':
      case 'dataIndex':
      case 'name':
      case 'value':
      case 'special':
      case 'special2':
        return data && data['_' + key];
    }

    return null;
  }
  /**
   * 修改私有数据中获取特定项
   * @param {shape} shape
   * @param {string} key
   * @param {*} value
   */


  function set(shape, key, value) {
    shape._echartsData = shape._echartsData || {};

    switch (key) {
      case 'series': // 当前系列值

      case 'seriesIndex': // 系列数组位置索引

      case 'data': // 当前数据值

      case 'dataIndex': // 数据数组位置索引

      case 'name':
      case 'value':
      case 'special':
      case 'special2':
        shape._echartsData['_' + key] = value;
        break;
    }
  }
  /**
   * 私有数据克隆，把source拷贝到target上
   * @param {shape} source 源
   * @param {shape} target 目标
   */


  function clone(source, target) {
    target._echartsData = {
      '_series': source._echartsData._series,
      '_seriesIndex': source._echartsData._seriesIndex,
      '_data': source._echartsData._data,
      '_dataIndex': source._echartsData._dataIndex,
      '_name': source._echartsData._name,
      '_value': source._echartsData._value,
      '_special': source._echartsData._special,
      '_special2': source._echartsData._special2
    };
  }

  return {
    pack: pack,
    set: set,
    get: get,
    clone: clone
  };
}();