/**
 * Created by PanJiaChen on 16/11/18.
 */

/**
 * @param {string} path
 * @returns {Boolean}
 */
export function isExternal(path) {
  return /^(https?:|mailto:|tel:)/.test(path)
}

/**
 * @param {string} str
 * @returns {Boolean}
 */
export function validUsername(str) {
  const valid_map = ['admin', 'editor']
  return valid_map.indexOf(str.trim()) >= 0
}

export function validMail(str) {
  return /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/.test(str)
}

export function validPhone(str) {
  return /^1[0-9]{10}$/.test(str)
}

export function validId(idStr) {
  const sId = String(idStr)
  if (!/(^\d{15}$)|(^\d{17}(\d|X|x)$)/.test(sId)) {
    return false
  }
  // 身份证省编码
  const provinceCode = {
    11: '北京',
    12: '天津',
    13: '河北',
    14: '山西',
    15: '内蒙古',
    21: '辽宁',
    22: '吉林',
    23: '黑龙江',
    31: '上海',
    32: '江苏',
    33: '浙江',
    34: '安徽',
    35: '福建',
    36: '江西',
    37: '山东',
    41: '河南',
    42: '湖北',
    43: '湖南',
    44: '广东',
    45: '广西',
    46: '海南',
    50: '重庆',
    51: '四川',
    52: '贵州',
    53: '云南',
    54: '西藏',
    61: '陕西',
    62: '甘肃',
    63: '青海',
    64: '宁夏',
    65: '新疆',
    71: '台湾',
    81: '香港',
    82: '澳门',
    91: '国外'
  }
  if (!provinceCode[sId.substring(0, 2)]) {
    return false
  }
  // 出生日期验证
  const yearStr = sId.substring(6, 10)
  const monthStr = sId.substring(10, 12)
  const dayStr = sId.substring(12, 14)
  const dateObj = new Date(yearStr, monthStr - 1, dayStr)
  const inputDateStr = `${yearStr}-${monthStr}-${dayStr}`
  const calcuMonth = (dateObj.getMonth() + 1) >= 10 ? (dateObj.getMonth() + 1) : `0${dateObj.getMonth() + 1}`
  const calcuDate = dateObj.getDate() >= 10 ? dateObj.getDate() : `0${dateObj.getDate()}`
  const calcuDateStr = `${dateObj.getFullYear()}-${calcuMonth}-${calcuDate}`
  if (inputDateStr !== calcuDateStr) {
    return false
  }
  // 校验码校验
  let sum = 0
  const weights = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
  const codes = '10X98765432'
  for (let i = 0; i < sId.length - 1; i++) {
    sum += sId[i] * weights[i]
  }
  const last = codes[sum % 11] // 计算出来的最后一位身份证号码
  if (sId[sId.length - 1] !== last) {
    return false
  }
  return true
}
