import _ from 'lodash';
/**
 * str { String } 完整字符串
 * tatget { String } 目标对象，要查找的字符串
 */
var searchStrIndexOf = function searchStrIndexOf(str, target) {
  var index = str.indexOf(target);
  var sum = 0;
  while (index > -1) {
    index = str.indexOf(target, index + 1);
    sum++;
  }
  return sum;
};
var sqlLint = function sqlLint(data, options) {
  var arr = [];
  options.map(function (item) {
    arr.push(item.name);
    window[item.name] = item.webType;
  });
  var AVG = function AVG(_d) {
    console.log('AVG', _d);
    if (_d.indexOf('string') !== -1) {
      throw new Error('AVG函数中不支持字符串类型字段');
    }
    return _eval(_d);
  };
  var COUNT = function COUNT(_d) {
    return _eval(_d);
  };
  var SUM = function SUM(_d) {
    if (_d.indexOf('string') !== -1) {
      throw new Error('SUM函数中不支持字符串类型字段');
    }
    return _eval(_d);
  };
  var _eval = function _eval(_evalData) {
    try {
      eval(_evalData);
    } catch (err) {
      var _err = err + '';
      // console.log('err', _err);
      if (_err.indexOf('AVG函数中不支持字符串类型字段') !== -1) {
        return 'AVG函数中不支持字符串类型字段';
      }
      if (_err.indexOf('SUM函数中不支持字符串类型字段') !== -1) {
        return 'SUM函数中不支持字符串类型字段';
      }
      if (_err.indexOf('is not defined') !== -1) {
        var v = _.trim(_err.split(':')[1].split('is not defined')[0]);
        if (arr.indexOf(v) === -1) {
          return '表达式错误, 未知字段：' + v;
        }
      } else {
        return '表达式错误';
      }
    }
  };
  if (data.indexOf('()') !== -1) {
    return '( )中缺少字段';
  }
  if (searchStrIndexOf(data, '(') != searchStrIndexOf(data, ')')) {
    var str = searchStrIndexOf(data, '(') > searchStrIndexOf(data, ')') ? ')' : '(';
    return '格式错误，请添加  ' + str;
  }
  var character = [';', '￥', '$', '%', '^', '&', '<', '>', ',', '.'];
  var characterErr = '';
  character.map(function (item) {
    if (data.indexOf(item) !== -1) {
      characterErr = '表达式错误';
    }
  });
  if (characterErr) {
    return characterErr;
  }
  return _eval(data);
};
export { searchStrIndexOf, sqlLint };