'use strict';

function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }

var isNum = _interopDefault(require('./isNum'));
var isBol = _interopDefault(require('./isBol'));

/**
 * 随机生成一个指定范围的数字
 * @param {number} start 随机数范围开始（包含）
 * @param {number} end 随机数范围结束（不包含）
 * @param {boolean} isFloat 是否浮点数
 * @returns {number}
 *
 * @example
 * randomNum()            // => 0.6765722889615231 (随机)
 * randomNum(5)           // => 4 (随机，0-4)
 * randomNum(1,5)         // => 2 (随机，1-4)
 * randomNum(1, 2, true)  // => 1.804401447296491 (随机)
 *
 * // 随机获取数组的元素
 * const arr = ['a', 'b', 'c', 'd'];
 * arr[randomNum(arr.length)];  // => 'c' (随机)
 */
function randomNum(start, end, isFloat) {
  var random = Math.random();
  if (!isNum(start)) return random;
  if (isBol(end)) isFloat = end;
  var rdNum;

  if (!isNum(end) || end === start) {
    rdNum = random * start;
  } else {
    rdNum = random * (end - start) + start;
  }

  return isFloat ? rdNum : Math.floor(rdNum);
}

module.exports = randomNum;
