/**
 * @description 时间格式化 YYYY-mm-dd HH:MM表示2019-06-06 19:45
 * @author Seam
 * @date 2020-01-11
 * @export
 * @param {*} fmt
 * @param {*} date
 * @returns
 */
export function dateFormat(date, fmt = 'YYYY-mm-dd HH:MM:SS') {
  let ret
  const opt = {
    'Y+': date.getFullYear().toString(), // 年
    'm+': (date.getMonth() + 1).toString(), // 月
    'd+': date.getDate().toString(), // 日
    'H+': date.getHours().toString(), // 时
    'M+': date.getMinutes().toString(), // 分
    'S+': date.getSeconds().toString() // 秒
    // 有其他格式化字符需求可以继续添加，必须转化成字符串
  }
  for (const k in opt) {
    ret = new RegExp('(' + k + ')').exec(fmt)
    if (ret) {
      fmt = fmt.replace(ret[1], (ret[1].length === 1) ? (opt[k]) : (opt[k].padStart(ret[1].length, '0')))
    }
  }
  return fmt
}
/**
 * 金额格式化
 * @param { } num
 */
export function moneyFilter(num) {
  if (num) {
    const num1 = num.toString().split('.')
    if (num1.length === 1) {
      num = num.toString() + '.00'
      return num
    }
    if (num1.length > 1) {
      if (num1[1].length < 2) {
        let zero = ''
        for (let i = 0; i < 2 - num1[1].length; i++) {
          zero += '0'
        }
        num = num.toString() + zero
      }
      if (num1[1].length > 2) {
        num = num1[0] + '.' + num1[1].substring(2, 0)
      }
      return num
    }
  }
}
/**
 * 千分位格式化
 * @param {*} num
 */
export function Thousands(num) {
  if (num) {
    if (num.toString().indexOf('.') !== -1) {
      const b = num.toLocaleString()
      return b
    } else {
      const c = num.toString().replace(/(\d)(?=(?:\d{3})+$)/g, '$1,')
      return c
    }
  } else {
    return 0
  }
}

/**
 * 保留小数点后
 * @param {*} double
 * @param {*} fix
 */
export function toFixedFilter(double, fix = 2) {
  return double.toFixed(fix)
}

/**
 * 计算天数
 * @param {*} validDate
 */
export function calculateDate(validDate) {
  let days = ''
  if (validDate) {
    const validDateTime = new Date(validDate)
    const nowTime = new Date()
    const time = validDateTime - nowTime // 毫秒
    if (time > 0) {
      days = Math.floor(time / (1000 * 60 * 60 * 24))
    }
  }
  return days
}
/**
 * 时间运算
 * @param {*} time
 * @param {*} cFormat
 */
export function parseTime(time, cFormat) {
  if (arguments.length === 0) {
    return null
  }
  const format = cFormat || '{y}-{m}-{d} {h}:{i}:{s}'
  let date
  if (typeof time === 'object') {
    date = time
  } else {
    if (('' + time).length === 10) time = parseInt(time) * 1000
    date = new Date(time)
  }
  const formatObj = {
    y: date.getFullYear(),
    m: date.getMonth() + 1,
    d: date.getDate(),
    h: date.getHours(),
    i: date.getMinutes(),
    s: date.getSeconds(),
    a: date.getDay()
  }
  const timeStr = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => {
    let value = formatObj[key]
    if (key === 'a') return ['一', '二', '三', '四', '五', '六', '日'][value - 1]
    if (result.length > 0 && value < 10) {
      value = '0' + value
    }
    return value || 0
  })
  return timeStr
}

/**
 * 部分隐藏
 * @param {*} str
 * @param {*}  前面保留的位数
 * @param {*} 后面的保留的位数
 */
export function hideIdCard(str, frontLen, endLen) {
  if (!str) return ''
  const len = str.length - frontLen - endLen
  let xing = ''
  for (let i = 0; i < len; i++) {
    xing += '*'
  }
  return str.substring(0, frontLen) + xing + str.substring(str.length - endLen)
}
