/**
 * @description 生成指定位随机数的函数
 * @param {number} length 随机数的位数
 * @param {boolean} isUpperCase 是否大写
 * @returns {string} 随机36进制数
 */
/**
 * 生成指定位随机数的函数
 * @param {number} length 随机数的位数
 * @param {boolean} isUpperCase 是否大写
 * @returns {string} 随机36进制数
 */
export function getRandomNumber(length = 8, isUpperCase = false) {
  let randomNumber = Math.random()
    .toString(36)
    .substring(2, 2 + length);
  if (isUpperCase) {
    randomNumber = randomNumber.toUpperCase();
  }
  return randomNumber;
}

/**
 * 下载文件
 * @param {string} url 文件地址
 * @param {string} downloadName 文件名称
 */
export function downloadFile(url, downloadName) {
  const a = document.createElement('a');
  a.href = url;
  a.download = downloadName;
  a.click();
  a.remove();
}

/**
 * 柯里化函数（将接受多个参数的函数转换为一系列接受单个参数的函数）
 * @param {Function} fn 需要柯里化的函数
 * @returns Function
 */
export let curry = (fn) => {
  if (typeof fn !== 'function') throw new Error('No function provided');
  return function curriedFn(...args) {
    if (args.length < fn.length) return (...args2) => curriedFn(...args, ...args2);
    return fn(...args);
  };
};
