/**
 * 控制台输出日志
 * @param obj 要打印的对象
 */
function log(obj) {
  console.log(JSON.stringify(obj));
}

/**
 * JSON字符串转JSON对象
 * @param str JSON字符串
 */
var str2Json = function (str) {
  if (!str) return;

  var json = JSON.parse(str);
  return json;
};

/**
 * 检查字符串是否是null或''
 * @param str 字符串
 */
var isNull = function (str) {
  return str ? str : '---';
};

/**
 * 获取文件的完整路径
 * @param   fileHost  静态资源基地址
 * @param   url       文件的相对地址
 */
function getFullUrl(fileHost, url) {
  if (!url || url.indexOf('/') == -1) {
    return '/images/list-default.png';
  }
  var fullUrl = fileHost + '/' + url;
  return fullUrl;
}

/**
 * 始终返回文件列表的第一个文件,并且是该文件的完整url路径和类型
 * @param   fileHost  静态资源基地址
 * @param   filesStr  文件数组(JSON字符串)
 */
var getSingleFullUrl = function (fileHost, filesStr) {
  if (!filesStr) return false;
  var files = str2Json(filesStr);

  if (files.length == 0) return false;

  return {
    url: fileHost + '/' + files[0].url,
    type: files[0].type,
  };
};

/**
 * 字符串数组中是否包含某个字符串
 * @param  arr 字符串数组
 * @param  str 检测的字符串
 */
var isIncluded = function (arr, str) {
  return arr.indexOf(str) >= 0;
};

/**
 * 格式化日期
 * @param  arr 时间戳
 * @param  str 展示的日期司机 默认0
 * 0 (年-月-日 时:分:秒) 1 (x年-x月-x日 时:分:秒) 2 (x年-x月-x日) 3 (时:分:秒)
 */
var getDateTime = function (value, type) {
  //不能使用 new Date()
  var time = new Date(value);
  var year = time.getFullYear();
  var month = time.getMonth() + 1;
  var date = time.getDate();
  var hour = time.getHours();
  var minute = time.getMinutes();
  var second = time.getSeconds();
  month = month < 10 ? '0' + month : month;
  date = date < 10 ? '0' + date : date;
  hour = hour < 10 ? '0' + hour : hour;
  minute = minute < 10 ? '0' + minute : minute;
  second = second < 10 ? '0' + second : second;
  var arr = [
    year + '-' + month + '-' + date + ' ' + hour + ':' + minute + ':' + second,
    year +
    '年' +
    month +
    '月' +
    date +
    '日' +
    ' ' +
    hour +
    ':' +
    minute +
    ':' +
    second,
    year + '年' + month + '月' + date + '日',
    hour + ':' + minute + ':' + second,
  ];
  if (!type) {
    return arr[0];
  }
  return arr[type];
};

/**
 * 把m转为km，保留小数点后两位
 * @param  m 距离数值
 */
function setMorKm(m) {
  var n = '';
  if (m) {
    if (m >= 1000) {
      n = (m / 1000).toFixed(2) + 'km';
    } else {
      n = m + 'm';
    }
  } else {
    n = '0m';
  }
  return n;
}

/**
 * 根据url存在[]根据对象内的值动态修改，并且url内可自动化拼接参数
 * @param  String  url地址
 * @param  Object  对象
 */
function updateQuery(url, item) {
  if (!item) {
    return url;
  }
  let keys = Object.keys(item);
  let newUrl = url;

  keys.forEach(key => {
    let value = item[key];
    let search = `\\[${key}\\]`;
    let regex = new RegExp(search, 'g');
    newUrl = newUrl.replace(regex, value);
  });

  return newUrl
}

function formatStr(str) {
  return str.substring(0, 1) + new Array(str.length).join('*')
}

export default {
  log: log,
  str2Json: str2Json,
  isNull: isNull,
  getFullUrl: getFullUrl,
  getSingleFullUrl: getSingleFullUrl,
  isIncluded: isIncluded,
  getDateTime: getDateTime,
  setMorKm: setMorKm,
  updateQuery: updateQuery,
  formatStr: formatStr
};