export const findNodeUpper = (ele, tag) => {
  if (ele.parentNode) {
    if (ele.parentNode.tagName === tag.toUpperCase()) {
      return ele.parentNode;
    } else {
      if (ele.parentNode) return findNodeUpper(ele.parentNode, tag);
      else return false;
    }
  }
};

export const getScrollbarWidth = () => {
  let oP = document.createElement('p');
  let styles = {
    width: '100px',
    height: '100px',
    overflowY: 'scroll'
  };
  for (let i in styles) {
    oP.style[i] = styles[i];
  }
  document.body.appendChild(oP);
  let scrollbarWidth = oP.offsetWidth - oP.clientWidth;
  oP.remove();
  return scrollbarWidth;
};

export const createNewArray = (length, content = undefined) => {
  let i = -1;
  let arr = [];
  while (++i < length) {
    let con = Array.isArray(content) ? content[i] : content;
    arr.push(con);
  }
  return arr;
};

export const iteratorByTimes = (times, fn) => {
  let i = -1;
  while (++i < times) {
    fn(i);
  }
};

export const getHeaderWords = (length) => {
  let wordsArr = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'];
  let headerArr = [];
  if (length <= 26) {
    headerArr = wordsArr.slice(0, length);
  } else {
    headerArr = [...wordsArr];
    let num = length - 26;
    let firstWordIndex = 0;
    let secondWordIndex = 0;
    let i = -1;
    while (++i < num) {
      firstWordIndex = Math.floor(i / 26);
      secondWordIndex = i % 26;
      let sumWord = `${wordsArr[firstWordIndex]}${wordsArr[secondWordIndex]}`;
      headerArr.push(sumWord);
    }
  }
  return headerArr;
};

// 获取数组中第一个不为空的值
export const getFirstNotNullValue = (array, index) => {
  if (!(array && array.length)) return false;
  let r = -1;
  let rowLength = array.length;
  while (++r < rowLength) {
    let item = array[r][index];
    if (item || item === 0) return item;
  }
  return false;
};

const isChineseReg = new RegExp('[\\u4E00-\\u9FFF]+', 'g');
export const sortArr = (arr, index) => {
  if (arr.length <= 1) return;
  const firstNotNullValue = getFirstNotNullValue(arr, index);
  if (!firstNotNullValue && firstNotNullValue !== 0) return;
  if (!isChineseReg.test(firstNotNullValue)) {
    if (isNaN(Number(firstNotNullValue))) {
      // 非中文非数值
      arr.sort();
    } else {
      // 数值型
      arr.sort((a, b) => {
        return a[index] - b[index];
      });
    }
  } else {
    arr.sort((a, b) => {
      return a[index].localeCompare(b[index], 'zh');
    });
  }
};

// 倒序
export const sortDesArr = (arr, index) => {
  if (arr.length <= 1) return;
  const firstNotNullValue = getFirstNotNullValue(arr, index);
  if (!firstNotNullValue && firstNotNullValue !== 0) return;
  if (!isChineseReg.test(firstNotNullValue)) {
    if (isNaN(Number(firstNotNullValue))) {
      // 非中文非数值
      arr.sort().reverse();
    } else {
      // 数值型
      arr.sort((a, b) => {
        return b[index] - a[index];
      });
    }
  } else {
    arr.sort((a, b) => {
      return b[index].localeCompare(a[index], 'zh');
    });
  }
};

export const on = (ele, event, callback) => {
  ele.addEventListener(event, callback);
};

export const off = (ele, event, callback) => {
  ele.removeEventListener(event, callback);
};

export const attr = (ele, attribution, value) => {
  if (value || value === 0) {
    ele.setAttribute(attribution, value);
  } else {
    return ele.getAttribute(attribution);
  }
}
