import isArray from './is-array';
import isFunction from './is-function';
import groupBy from './group-by';

/**
 * 将数据分组成 map
 * @param data
 * @param condition
 */
export default function groupToMap(data: any, condition: string[] | string | ((row: any) => string)) {
  if (!condition) {
    return {
      0: data,
    };
  }
  if (!isFunction(condition)) {
    // 如果是字符串，则按照 a*b 风格成数组
    const paramscondition = isArray(condition) ? condition : condition.replace(/\s+/g, '').split('*');
    condition = function (row) {
      let unique = '_'; // 避免出现数字作为Key的情况，会进行按照数字的排序

      // 根据字段列表的值，拼接成 key
      for (let i = 0, l = paramscondition.length; i < l; i++) {
        unique += row[paramscondition[i]] && row[paramscondition[i]].toString();
      }
      return unique;
    };
  }
  return groupBy(data, condition);
}
