import {ElMessage} from 'element-plus'
import {baseinfo} from '@/data/inpatient'

export function nullPatient() {
    const patient = baseinfo()
    if (patient.inpatientNo && patient.admissTimes) {
        return false
    } else {
        ElMessage({
            message: '请先选择患者！',
            type: 'warning',
            duration: 2600,
            showClose: true,
        })
        return true
    }
}

export function isValidPhone(phone) {
    const myreg = /^[1][3,4,5,6,7,8,9][0-9]{9}$/
    return myreg.test(phone)
}

function isValidIdcard(card) {
    const provinces = {
        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: '国外',
    }

    //检查号码是否符合规范，包括长度，类型
    const isCardNo = function (card) {
        //身份证号码为15位或者18位，15位时全为数字，18位前17位为数字，最后一位是校验位，可能为数字或字符X
        const reg = /(^\d{15}$)|(^\d{17}(\d|X)$)/
        return reg.test(card)
    }

    //取身份证前两位,校验省份
    const checkProvince = function (card) {
        const provinceCode = card.substr(0, 2)
        return provinces[provinceCode]
    }

    //检查生日是否正确
    const checkBirthday = function (card) {
        const len = card.length
        //身份证15位时，次序为省（3位）市（3位）年（2位）月（2位）日（2位）校验位（3位），皆为数字
        if (len === 15) {
            const re_fifteen = /^(\d{6})(\d{2})(\d{2})(\d{2})(\d{3})$/
            let arr_data = card.match(re_fifteen)
            let year = arr_data[2]
            let month = arr_data[3]
            let day = arr_data[4]
            let birthday = new Date('19' + year + '/' + month + '/' + day)
            return verifyBirthday('19' + year, month, day, birthday)
        }
        //身份证18位时，次序为省（3位）市（3位）年（4位）月（2位）日（2位）校验位（4位），校验位末尾可能为X
        if (len === 18) {
            const re_eighteen = /^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$/
            let arr_data = card.match(re_eighteen)
            let year = arr_data[2]
            let month = arr_data[3]
            let day = arr_data[4]
            let birthday = new Date(year + '/' + month + '/' + day)
            return verifyBirthday(year, month, day, birthday)
        }
        return false
    }

    //校验日期
    const verifyBirthday = function (year, month, day, birthday) {
        const now = new Date()
        var now_year = now.getFullYear()
        //年月日是否合理
        if (birthday.getFullYear() == year && birthday.getMonth() + 1 == month && birthday.getDate() == day) {
            //判断年份的范围（3岁到120岁之间)
            var time = now_year - year
            return time >= 3 && time <= 120
        }
        return false
    }

    //校验位的检测
    const checkParity = function (card) {
        //15位转18位
        card = changeFivteenToEighteen(card)
        const len = card.length
        if (len === 18) {
            const arrInt = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
            const arrCh = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']
            var cardTemp = 0,
                i,
                valnum
            for (i = 0; i < 17; i++) {
                cardTemp += card.substr(i, 1) * arrInt[i]
            }
            valnum = arrCh[cardTemp % 11]
            return valnum == card.substr(17, 1)
        }
        return false
    }

    //15位转18位身份证号
    const changeFivteenToEighteen = function (card) {
        if (card.length === 15) {
            const arrInt = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
            const arrCh = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']
            var cardTemp = 0,
                i
            card = card.substr(0, 6) + '19' + card.substr(6, card.length - 6)
            for (i = 0; i < 17; i++) {
                cardTemp += card.substr(i, 1) * arrInt[i]
            }
            card += arrCh[cardTemp % 11]
            return card
        }
        return card
    }

    if (!card) {
        return false
    }

    card = card.trim()

    return card !== '' && isCardNo(card) && checkProvince(card) && checkBirthday(card) && checkParity(card)
}

export function validateCovidAnswer(answer) {
    if (!answer.name) {
        return '请填写姓名！'
    }
    if (!isValidPhone(answer.phone)) {
        return '请填写正确的手机号！'
    }
    if (!answer.patientId) {
        if (!isValidIdcard(answer.idcard)) {
            return '请填写正确的身份证号！'
        }
    }
    if (!answer.temperature) {
        return '请选择体温选项！'
    }
    if (answer.temperature === '2' && !answer.feverNumber) {
        return '体温为发烧时请填写具体温度！'
    }
    if (answer.item5 === 51 && answer.symptoms.length < 1) {
        return '请选择症状！'
    }
    let count = 0
    for (let key in answer) {
        if (key.indexOf('item') !== -1) {
            count++
        }
    }
    if (count < 5) {
        return '有未选择的选项！'
    }
    answer.addrAdditional = ''
    return ''
}
