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 getTypeSn = url => {
  let type_sn = ''
  if (url.indexOf('type_sn') != -1 && url.indexOf('bonusex') != -1) {
    let arr = url.split('&')
    arr.some(item => {
      if (item.indexOf('type_sn') != -1) {
        type_sn = item.split('=')[1]
        return true
      }
    })
  }
  return type_sn
}

function getUrlPrefixAndParams(url) {
  // 用JS拿到URL，如果函数接收了URL，那就用函数的参数。如果没传参，就使用当前页面的URL

  let params = url.split('?');
  let prefix = params[0];
  if(params.length < 2) {    
    return [prefix, {}];
  }
  
  var queryString = params[1];
  // 用来存储我们所有的参数
  var obj = {};
  // 如果没有传参，返回一个空对象
  if (!queryString) {
      return obj;
  }
  // stuff after # is not part of query string, so get rid of it
  queryString = queryString.split('#')[0];
  // 将参数分成数组
  var arr = queryString.split('&');
  for (var i = 0; i < arr.length; i++) {
      // 分离成key:value的形式
      var a = arr[i].split('=');
      // 将undefined标记为true
      var paramName = a[0];
      var paramValue = typeof (a[1]) === 'undefined' ? true : a[1];
      // 如果调用对象时要求大小写区分，可删除这两行代码
      paramName = paramName.toLowerCase();
      if (typeof paramValue === 'string') paramValue = paramValue.toLowerCase();
      // 如果paramName以方括号结束, e.g. colors[] or colors[2]
      if (paramName.match(/\[(\d+)?\]$/)) {
          // 如果paramName不存在，则创建key
          var key = paramName.replace(/\[(\d+)?\]/, '');
          if (!obj[key]) obj[key] = [];
          // 如果是索引数组 e.g. colors[2]
          if (paramName.match(/\[\d+\]$/)) {
              // 获取索引值并在对应的位置添加值
              var index = /\[(\d+)\]/.exec(paramName)[1];
              obj[key][index] = paramValue;
          } else {
              // 如果是其它的类型，也放到数组中
              obj[key].push(paramValue);
          }
      } else {
          // 处理字符串类型
          if (!obj[paramName]) {
              // 如果如果paramName不存在，则创建对象的属性
              obj[paramName] = paramValue;
          } else if (obj[paramName] && typeof obj[paramName] === 'string') {
              // 如果属性存在，并且是个字符串，那么就转换为数组
              obj[paramName] = [obj[paramName]];
              obj[paramName].push(paramValue);
          } else {
              // 如果是其它的类型，还是往数组里丢
              obj[paramName].push(paramValue);
          }
      }
  }
  return [prefix,obj];
}

module.exports = {
  getTypeSn: getTypeSn,
  formatTime: formatTime,
  parseAppjump: getUrlPrefixAndParams
}
