// 验证用户名
import {Message} from "element-ui";

export function validateUsername(rule, value, callback) {
    let len = rule.length || 4;
    if (!value || String(value).trim().length === 0) {
        callback(new Error('请输入用户名'));
    } else if (value.length < len) {
        callback(new Error('用户名长度不足' + len + '位'));
    } else {
        callback();
    }
}

// 验证不为空
export function validateNotEmpty(rule, value, callback) {
    if (rule.required) {
        if (value === undefined || value === null) {
            callback(new Error(rule.errorMessage || '不能为空'));
        } else if (value instanceof Array && value.length === 0) {
            callback(new Error(rule.errorMessage || '不能为空'));
        } else if (String(value).length === 0) {
            callback(new Error(rule.errorMessage || '不能为空'));
        } else {
            callback();
        }
    } else {
        callback();
    }
}

// 验证密码
export function validatePassword(rule, value, callback) {
    let len = rule.length || 4;
    if (!value || value.trim().length === 0) {
        callback(new Error('请输入密码'));
    } else if (value.length < len) {
        callback(new Error('密码长度不足' + len + '位'));
    } else {
        callback();
    }
}

// 验证密码
export function validatePasswordReg(rule, value, callback) {
    if (!/^(?=.*\d)(?=.*[a-zA-Z])(?=.*[-_~!@#$%^&*])[\da-zA-Z-_~!@#$%^&*]{8,20}$/.test(value)) {
        callback(new Error('必须包含数字、字母、特殊符号（-_~!@#$%^&*）且大于等于8位'));
    } else {
        callback();
    }
}

// 验证年龄
export function validateAge(rule, value, callback) {
    if (!isPositiveInteger(value)) {
        callback(new Error('请输入正确年龄'));
    } else if (value < 18) {
        callback(new Error('年龄必须大于18岁'));
    } else {
        callback();
    }
}


// 验证可空的手机号
export function validatePhoneCanBeEmpty(rule, value, callback) {
    if (!value || value.trim().length === 0) {
        return callback(); // new Error('手机号不能为空')
    } else {
        const reg = /^1[3|4|5|7|8|9][0-9]\d{8}$/;
        if (reg.test(value)) {
            callback();
        } else {
            return callback(new Error('请输入正确的手机号'));
        }
    }
}

// 验证手机号
export function validatePhone(rule, value, callback) {
    if (!value || String(value).trim().length === 0) {
        return callback(new Error('手机号不能为空'));
    } else {
        const reg = /^1[3|4|5|7|8|9]\d{9}$/;
        if (reg.test(value)) {
            callback();
        } else {
            return callback(new Error('请输入正确的手机号'));
        }
    }
}

// 验证身份证号码
export function validateCardID(rule, value, callback) {
    if (!value || value.trim().length === 0) {
        return callback(new Error('身份证号码不能为空'));
    } else {
        if (isCardID(value)) {
            callback();
        } else {
            return callback(new Error('请输入正确的身份证号码'));
        }
    }
}

// 验证金额，大于0的小数
export function validateMoney(rule, value, callback) {
    if (!isFloat(value) || parseFloat(value) <= 0) {
        callback(new Error('请输入正确金额'));
    } else {
        callback();
    }
}

// 外链检查
export function isExternal(str) {
    return !!str && /^(https?:|mailto:|tel:)/.test(str)
}

// 小数检查
export function isFloat(str) {
    str = str.toString();
    str = str.charAt(0) === '-' ? str.substring(1) : str;
    return str !== "" && /^\d+(?=\.?\d+$|$)/.test(str)
}

// 数字检查
export function isNumber(str) {
    return str !== "" && /^\d+$/.test(str)
}

// 正整数检查
export function isPositiveInteger(str) {
    return !!str && (/^[1-9]\d*$/.test(str));
}

// 中文检查
export function isChinese(str) {
    return !!str && (/^[\u4e00-\u9fa5]+$/.test(str));
}

// 手机号检查
export function isPhone(str) {
    return !!str && (/^1[3456789]\d{9}$/.test(str));
}

// 邮箱检查
export function isEmail(str) {
    return !!str && (/\w+@[a-zA-Z0-9]{2,10}(?:\.[a-z]{2,4}){1,3}/.test(str));
}

// 校验不能为空
export function isNotEmpty(str) {
    return !!str && (/\S/.test(str));
}

// 简单校验身份证号
export function isIdentityNumber(str) {
    return !!str && (/(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/.test(str));
}

// 身份证号码检查
export function isCardID(sId) {
    if (!/^\d{17}(\d|x|X)$/i.test(sId)) {
        return false
    }
    let sBirthday;
    let iSum = 0;
    sId = sId.replace(/x$/i, "a");
    sBirthday = sId.substr(6, 4) + "-" + Number(sId.substr(10, 2)) + "-" + Number(sId.substr(12, 2));
    let d = new Date(sBirthday.replace(/-/g, "/"));
    if (sBirthday !== (d.getFullYear() + "-" + (d.getMonth() + 1) + "-" + d.getDate())) {
        return false
    }
    for (let i = 17; i >= 0; i--) {
        iSum += (Math.pow(2, i) % 11) * parseInt(sId.charAt(17 - i), 11);
    }
    return iSum % 11 === 1;
}

// 文本中提取邮箱
export function getEmail(str) {
    return str && str.match(/\w+@[a-zA-Z0-9]{2,10}(?:\.[a-z]{2,4}){1,3}/)[0];
}

// 检查图片格式及大小
export function checkImage(file) {
    const isJPG = file.type === 'image/jpeg';
    const isPNG = file.type === 'image/png';
    const isLt2M = file.size / 1024 / 1024 < 2;

    if (!isJPG && !isPNG) {
        Message.warning("文件必须是图片!");
    }
    if (!isLt2M) {
        Message.warning("上传图片大小不能超过 2MB!");
    }
    return (isJPG || isPNG) && isLt2M;
}
