// 常用正则
const regularData = {
    'ExPhone': /^(((13[0-9]{1})|(15[0-9]{1})|(17[0-9]{1})|(19[0-9]{1})|(18[0-9]{1}))+\d{8})$/, // 手机号
    'ExEmail': /^[a-z0-9]+([._\\-]*[a-z0-9])*@([a-z0-9]+[-a-z0-9]*[a-z0-9]+.){1,63}[a-z0-9]+$/, // email
    'ExZip': /^[0-9]{6}$/, // 邮政编号
    'ExCellphone': /^([0-9]{3,4}-)?[0-9]{7,8}$/, // 座机
    'ExBankcard': /^([1-9]{1})(\d{14}|\d{18})$/, // 银行卡号
    'ExIdentity': /^(^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$)|(^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])((\d{4})|\d{3}[Xx])$)$/, // 身份证号
    'ExCredit': /^[^_IOZSVa-z\W]{2}\d{6}[^_IOZSVa-z\W]{10}$/, // 社会信用代码
    // 网址
    'ExWebsite': /^((ht|f)tps?):\/\/([\w\-]+(\.[\w\-]+)*\/)*[\w\-]+(\.[\w\-]+)*\/?(\?([\w\-\.,@?^=%&:\/~\+#]*)+)?/, // eslint-disable-line no-useless-escape
    'ExPassWord': /^([a-zA-Z0-9!,.@#$%^&*()_?<>{}]){6,20}$/
}

const validateRules = (rule, value, callback) => { // 规则匹配
    let reg = ''
    if (rule.field) {
        key = rule.field
        if (key === 'mobile') {
            reg = regularData['ExPhone']
            validateMethod()
        } else if (key === 'password' || key === 'pwd') {
            reg = regularData['ExPassWord']
            pwd = value
            validateMethod()
        } else if (key === 'email') {
            reg = regularData['ExEmail']
            if (value !== '') validateMethod()
        } else if (key === 'passwordConfirm') {
            if (value === '') {
                callback(new Error('请再次输入密码'))
            } else if (value !== pwd) {
                callback(new Error('两次输入密码不一致!'))
            } else {
                callback()
            }
        } else if (key === 'isRead') {
            if (value === false) {
                callback(new Error())
            } else {
                callback()
            }
        }
    }

    // 验证规则
    function validateMethod () {
        if (reg.test(value)) {
            // 指定验证字段验证值是否存在于数据库
            if (key === 'mobile' || key === 'email') {
                // 判断rules中对应字段的属性中是否存在exists属性,true验证存在性
                if (rule.exists) {
                    checkExists()
                } else {
                    callback()
                }
            } else {
                callback()
            }
        } else {
            // 区分指定验证字段返回的错误信息
            if (key === 'mobile') {
                callback(new Error('请输入有效的手机号'))
            } else if (key === 'email') {
                callback(new Error('请输入正确的邮箱地址'))
            } else {
                callback(new Error())
            }
        }
    }

    
    function checkExists () {
        if (key === 'mobile') {
            checkMobile({mobile: value})
                .then((res) => {
                    if (res.data.code < 0) {
                        callback(new Error(res.data.msg))
                    } else {
                        callback()
                    }
                })
        } else if (key === 'email') {
            checkEmail({email: value})
                .then((res) => {
                    if (res.data.code < 0) {
                        callback(new Error(res.data.msg))
                    } else {
                        callback()
                    }
                })
        }
    }
}

export {
    areaData
    , provinceCityData
    , centerNavData
    , regularData
    , validateRules
}