function checkEmail(input, msg) {
    if (window.validateEmail(input.value)) {
        msg.innerHTML = '';
        input.classList.remove('is-invalid');
        input.classList.add('is-valid');
        return false;
    } else {
        msg.innerHTML = '<span class="text-danger">поле является обязательным для заполнения</span>';
        input.classList.remove('is-valid');
        input.classList.add('is-invalid');
        return true;
    }
}

function checkPhone(input, msg) {
    if (window.validatePhone(input.value)) {
        msg.innerHTML = '';
        input.classList.remove('is-invalid');
        input.classList.add('is-valid');
        return false;
    } else {
        msg.innerHTML = '<span class="text-danger">поле является обязательным для заполнения</span>';
        input.classList.remove('is-valid');
        input.classList.add('is-invalid');
        return true;
    }
}

function checkNotEmpty(input, msg) {
    var valid = false;

    if (input.value === '') {
        msg.innerHTML = '<span class="text-danger">поле является обязательным для заполнения</span>';
        input.classList.add('is-invalid');
        input.classList.remove('is-valid');
        valid = true;
    } else {
        msg.innerHTML = '';
        input.classList.add('is-valid');
        input.classList.remove('is-invalid');
    }

    return valid;
}

function checkTextRu(input, msg) {
    var valid = false;

    if (input.value === '') {
        msg.innerHTML = '<span class="text-danger">поле является обязательным для заполнения</span>';
        input.classList.add('is-invalid');
        input.classList.remove('is-valid');
        valid = true;
    } else {
        msg.innerHTML = '';
        input.classList.add('is-valid');
        input.classList.remove('is-invalid');
    }

    if (/[A-Za-z0-9]/.test(input.value)) {
        msg.innerHTML = '<span class="text-danger">поле должно заполняться кириллицей</span>';
        input.classList.add('is-invalid');
        input.classList.remove('is-valid');
        valid = true;
    }

    return valid;
}

function checkAccept(ckeckBox, msg) {
    var valid = false;

    if (ckeckBox.checked) {
        msg.innerHTML = '';
        ckeckBox.classList.add('is-valid');
        ckeckBox.classList.remove('is-invalid');
    } else {
        msg.innerHTML = '<span class="text-danger">укажите согласие, на обработку персональных данных</span>';
        ckeckBox.classList.add('is-invalid');
        ckeckBox.classList.remove('is-valid');
        valid = true;       
    }

    return valid;
}

function checkDate(input, msg, range = false) {
    var valid = false;

    if (range) {
        if (/^(0[1-9]|[12][0-9]|3[01])\.(0[1-9]|1[0-2])\.\d{4}.\-.(0[1-9]|[12][0-9]|3[01])\.(0[1-9]|1[0-2])\.\d{4}$/.test(input.value)) {
            msg.innerHTML = '';
            input.classList.add('is-valid');
            input.classList.remove('is-invalid');
        } else {
            msg.innerHTML = '<span class="text-danger">поле является обязательным для заполнения</span>';
            input.classList.add('is-invalid');
            input.classList.remove('is-valid');
            valid = true; 
        }
    } else {
        if (/^(0[1-9]|[12][0-9]|3[01])\.(0[1-9]|1[0-2])\.\d{4}$/.test(input.value)) {
            msg.innerHTML = '';
            input.classList.add('is-valid');
            input.classList.remove('is-invalid');
        } else {
            msg.innerHTML = '<span class="text-danger">поле является обязательным для заполнения</span>';
            input.classList.add('is-invalid');
            input.classList.remove('is-valid');
            valid = true; 
        }
    }

    return valid;
}

function checkInt(input, msg) {
    var valid = false;

    if (/^\d+$/.test(input.value)) {
        msg.innerHTML = '';
        input.classList.add('is-valid');
        input.classList.remove('is-invalid');
    } else {
        msg.innerHTML = '<span class="text-danger">поле является обязательным для заполнения</span>';
        input.classList.add('is-invalid');
        input.classList.remove('is-valid');
        valid = true; 
    }

    return valid;
}

function checkInn(input, msg) {
    var valid = false;
    
    if (input.value === '') {
        msg.innerHTML = '<span class="text-danger">поле является обязательным для заполнения</span>';
        input.classList.add('is-invalid');
        input.classList.remove('is-valid');
        valid = true;
    } else {
        if (is_valid_inn(input.value)) {
            msg.innerHTML = '';
            input.classList.add('is-valid');
            input.classList.remove('is-invalid');
        } else {
            msg.innerHTML = '<span class="text-danger">проверьте правильность введённых данных</span>';
            input.classList.add('is-invalid');
            input.classList.remove('is-valid');
            valid = true;       
        }
    }

    return valid;
}

function is_valid_inn(i) {
    if ( i.match(/\D/) ) return false;
    
    var inn = i.match(/(\d)/g);
    
    if ( inn.length == 10 )
    {
        return inn[9] == String(((
            2*inn[0] + 4*inn[1] + 10*inn[2] + 
            3*inn[3] + 5*inn[4] +  9*inn[5] + 
            4*inn[6] + 6*inn[7] +  8*inn[8]
        ) % 11) % 10);
    }
    else if ( inn.length == 12 )
    {
        return inn[10] == String(((
             7*inn[0] + 2*inn[1] + 4*inn[2] +
            10*inn[3] + 3*inn[4] + 5*inn[5] +
             9*inn[6] + 4*inn[7] + 6*inn[8] +
             8*inn[9]
        ) % 11) % 10) && inn[11] == String(((
            3*inn[0] +  7*inn[1] + 2*inn[2] +
            4*inn[3] + 10*inn[4] + 3*inn[5] +
            5*inn[6] +  9*inn[7] + 4*inn[8] +
            6*inn[9] +  8*inn[10]
        ) % 11) % 10);
    }
    
    return false;
}

function checkSmartCaptcha(token, msg) {
    if (token === '') {
        msg.innerHTML = '<span class="text-danger">Подтвердите, что Вы не робот</span>';
        return true;
    }
    
    msg.innerHTML = '';
    return false;
}

module.exports = {
    checkInt: checkInt,
    checkNotEmpty: checkNotEmpty,
    checkDate: checkDate,
    checkInn: checkInn,
    checkAccept: checkAccept,
    checkSmartCaptcha: checkSmartCaptcha, 
    checkTextRu: checkTextRu,
    checkEmail: checkEmail,
    checkPhone: checkPhone
};
