const http = require('./http.js');

const formatTime = date => {
  const year = date.getFullYear()
  const month = date.getMonth() + 1
  const day = date.getDate()
  const hour = date.getHours()
  const minute = date.getMinutes()
  const second = date.getSeconds()

  return [year, month, day].map(formatNumber).join('/') + ' ' + [hour, minute, second].map(formatNumber).join(':')
}

const formatNumber = n => {
  n = n.toString()
  return n[1] ? n : '0' + n
}

// 保存用户信息数据
const selfUserInfo = (global, force = false, name = 'selfUserInfo') => {
  return new Promise(resolve => {
    if (global[name] && !force) {
      resolve(global[name]);
    } else {
      http.get('/user/getAccountInfo').then(({ status, data = {} }) => {
        if (status === 0) {
          global[name] = data;
          resolve(global[name]);
        } else {
          resolve(false)
        }
      }).catch(() => {
        resolve(false)
      })
    }
  })
}

// 生成随机数uuid
const uuid = () => {
  var CHARS = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split("");
  for (var r, chars = CHARS, uuid = new Array(30), rnd = 0, i = 0; 30 > i; i++) {
    14 == i ? uuid[i] = "4" : 
    (2 >= rnd && (rnd = 33554432 + 16777216 * Math.random() | 0), r = 15 & rnd, rnd >>= 4, uuid[i] = chars[19 == i ? 3 & r | 8 : r]);
  }
  return uuid.join("")
}

/* 数字格式化 */
const numberFormat = (val, fixed = 2) => {
	if(typeof val != 'number' && !val) return '-';
	val = Number(val);
	if(typeof val != 'number') return val;
	if(typeof fixed == 'number' && fixed > 0) {
		val = val.toFixed(fixed);
	}
	const numArr = val.toString().split('.'),
		intNum = numArr[0],
		intNumFormat = intNum.toString().replace(/(\d)(?=(?:\d{3})+$)/g, '$1,'); //将整数部分逢三一断
	let floatNum = '';
	if(numArr[1]) {
		floatNum = `.${numArr[1]}`
	}
	return `${intNumFormat}${floatNum}`
}
// 函数节流(throttle)：函数在一段时间内多次触发只会执行第一次
const throttle = (fn, gapTime) => {
  if (gapTime == null || gapTime == undefined) {
    gapTime = 1500
  }
  let _lastTime = null
  return function () {
    let _nowTime = + new Date()
    if (_nowTime - _lastTime > gapTime || !_lastTime) {
      // 将this和参数传给原函数
      fn.apply(this, arguments)
      _lastTime = _nowTime
    }
  }
}
module.exports = {
  formatTime: formatTime,
  selfUserInfo,
  uuid,
  numberFormat,
  customerId: 47, //47
  throttle: throttle
}
