export function numberShorthand(value) {
  if (!value || value.length === 0) {
    return value;
  }

  const r = /^([+-]{1})?((?:\d+)?(?:\.\d+)?)$/;
  const matches = r.exec(value);

  // Dunno how this should be handled, actually.
  if (matches === null) {
    return value;
  }

  let sign = matches[1];
  const number = matches[2];

  let shortenedNumber = parseFloat(number).toFixed(3);
  let signifier = '';

  const numSignificantDigits = String(Math.round(shortenedNumber)).length;

  if (numSignificantDigits >= 4 && numSignificantDigits < 7) {
    shortenedNumber = number / 1000;
    signifier = 'K';
  } else if (numSignificantDigits >= 7 && numSignificantDigits < 10) {
    shortenedNumber = number / 1000000;
    signifier = 'M';
  } else if (numSignificantDigits >= 10 && numSignificantDigits < 13) {
    shortenedNumber = number / 1000000000;
    signifier = 'B';
  } else if (numSignificantDigits >= 13 && numSignificantDigits < 16) {
    shortenedNumber = number / 1000000000000;
    signifier = 'T';
  }

  if (!sign) {
    sign = '';
  }

  if (!shortenedNumber) {
    return 0;
  }

  return sign + String(parseFloat(shortenedNumber).toFixed(3)) + signifier;
}

export function numberPercent(value, isFraction = true) {
  if (!value || value.length === 0) {
    return value;
  }

  return String(parseFloat(value * (isFraction ? 100 : 1)).toFixed(2)) + '%';
}

export function numberInMillions(value) {
  if (!value || value.length === 0) {
    return value;
  }
  const shortened = value / 1000000;
  return shortened.toLocaleString();
}

function capitalize(string) {
  if (string.substr(0, 2).toLowerCase() === 'id') {
    return 'ID';
  }
  return string.charAt(0).toUpperCase() + string.slice(1);
}

export function decapitalize(string) {
  if (string.substr(0, 2).toLowerCase() === 'id') {
    return 'id';
  }
  return string.charAt(0).toLowerCase() + string.slice(1);
}
