 import { isNumber } from "./is.js";

// 单位转换
export function convertToUnit(str, unit = 'px') {
  if (str == null || str === '') {
    return undefined;
  } else if (isNaN(+str)) {
    return String(str);
  } else {
    return `${Number(str)}${unit}`;
  }
}

/**
 * 数据金额格式化
 * @param num   需要格式化的数字
 * @param place 补全保留小数位
 * @param decimal 小数位分隔符
 * @param separator 千位分隔符
 * @param prefix 前缀
 */
export function formatNumber(num, opt = {}) {
  if (!num && num !== 0) {
    return '';
  }

  const place = opt?.place ?? 2;
  const decimal = opt?.decimal ?? '.';
  const separator = opt?.separator ?? ',';
  const prefix = opt?.prefix ?? '￥';

  num = num + '';
  const x = num.split('.');
  let right =
    num.indexOf('.') > -1
      ? x[1].substring(0, place)
      : new Array(place).fill(0).join('');

  // 位数补全
  if (right.length < place) {
    right = right + new Array(place - right.length).fill(0).join('');
  }

  let x1 = x[0];
  const x2 = decimal + right;

  const rgx = /(\d+)(\d{3})/;
  if (separator && !isNumber(separator)) {
    while (rgx.test(x1)) {
      x1 = x1.replace(rgx, '$1' + separator + '$2');
    }
  }
  return prefix + x1 + x2;
}