function show_error(message){
    $('#error_alert').slideDown(500);
    $('#success_alert').hide();
    $('#error_alert').delay(5000).slideUp();
    $('#alert_error_text').empty();
    if (message)
        $('#alert_error_text').append(message)
}

function show_success(message){
    $('#success_alert').slideDown(500);
    $('#success_alert').delay(5000).slideUp();
    $('#alert_success_text').empty();
    if (message)
        $('#alert_success_text').append(message);
}



function validate_length(val, dest_len){
    if(val.length < dest_len){
        return false;
    }
    return true;
}

$(document).ready(function(){



    $('body').append('<div id="error_alert" class="alert alert-danger" role="alert" style="position: fixed; top: 50px; left: 10%; right: 10%; z-index: 9999; display: none;">Ошибка<br><small id="alert_error_text"></small></div>');
    $('body').append('<div id="success_alert" class="alert alert-success" role="alert" style="position: fixed; top: 50px; left: 10%; right: 10%; z-index: 9999; display: none;">Успех<br><small id="alert_success_text"></small></div>');

    $('#fio').on('input', function () {
    let input = $(this).val();

    // Убираем все лишние символы, кроме букв и пробелов
    input = input.replace(/[^a-zA-Zа-яА-ЯёЁ ]/g, '');

    // Преобразуем каждое слово, чтобы оно начиналось с заглавной буквы
    let formattedInput = input.split(' ').map(word => {
        if (word.length > 0) {
            return word.charAt(0).toUpperCase() + word.slice(1).toLowerCase();
        }
        return ''; // Пустые слова не трогаем
    }).join(' '); // Объединяем обратно с пробелами

    // Обновляем поле ввода с отформатированным текстом
    $(this).val(formattedInput);

    // Проверяем количество слов
    let words = formattedInput.trim().split(/\s+/); // Убираем лишние пробелы
    if (words.length < 3 || words.some(word => word.length < 2)) {
        $(this).parent().removeClass('success-field').addClass('errors-field'); // Подсветить поле
    } else {
        $(this).parent().removeClass('errors-field').addClass('success-field'); // Убрать подсветку
    }
    });



    $('#tel').on('change', function() {
        if($(this).val().length != 16){
            $(this).parent().removeClass('success-field').addClass('errors-field');
        } else{
            $(this).parent().removeClass('errors-field').addClass('success-field');
        }
    });



       // Проверка на дату рождения (не старше 80 лет)
    $('#dob').on('change', function() {
        const dob = new Date($(this).val());
        const currentDate = new Date();
        const age = currentDate.getFullYear() - dob.getFullYear();

        // Проверка на возраст (не старше 80 лет)
        if (age > 100 || (age === 100 && (currentDate.getMonth() < dob.getMonth() || (currentDate.getMonth() === dob.getMonth() && currentDate.getDate() < dob.getDate())))) {
            // Если возраст больше 80 лет, подсвечиваем ячейку как ошибку
            $(this).parent().removeClass('success-field').addClass('errors-field');
        } else {
            // Если возраст нормален, подсвечиваем ячейку как успешную
            $(this).parent().removeClass('errors-field').addClass('success-field');
        }
    });


    $("#kod").attr('maxlength','4');
    $('#kod').on('input', function() {
    let input = $(this).val();
    // Удаляем все символы, кроме цифр
    input = input.replace(/\D/g, '');
    // Обновляем поле ввода
    $(this).val(input);

        // Проверка на минимальную длину (не менее 11 символов)
    if (input.length < 4) {
        // Если введено меньше цифр, показываем ошибку
        $(this).parent().removeClass('success-field').addClass('errors-field');
    } else {
        // Если введено достаточно цифр, показываем успех
        $(this).parent().removeClass('errors-field').addClass('success-field');
    }
    });

    function verification(){
        $("#form_submit").children(".spinner-border").removeClass('d-none');
        $("#form_submit").attr("disabled", true);
        message = {}



        if(!(validate_length($('#fio').val(), 3)))
        {
            show_error('Введите ФИО', false);
            $("#form_submit").children(".spinner-border").addClass('d-none');
            $("#form_submit").removeAttr("disabled");
            return;
        }

        if(!(validate_length($('#tel').val(), 16)))
        {
            show_error('Введите Телефон', false);
            $("#form_submit").children(".spinner-border").addClass('d-none');
            $("#form_submit").removeAttr("disabled");
            return;
        }

        if ($('#dob').val().length !== 10 || new Date().getFullYear() - new Date($('#dob').val()).getFullYear() > 100) {
            show_error('Дата рождения должна быть корректной и возраст не более 80 лет', false);
            $("#form_submit").children(".spinner-border").addClass('d-none');
            $("#form_submit").removeAttr("disabled");
            return;
        }

        if ($('#dob').val().length !== 10 || new Date().getFullYear() < new Date($('#dob').val()).getFullYear()) {
            show_error('Проверьте дату ввода, вы указали дату больше чем сегодняшняя дата', false);
            $("#form_submit").children(".spinner-border").addClass('d-none');
            $("#form_submit").removeAttr("disabled");
            return;
        }

        $.each($('.tg_input'), function(e) {
            message[$(this).prop("id")] = $(this).val();
        });

        show_success("Ваши данные отправлены на проверку, <br> На указанный Вами номер телефона в ближайшее время поступит звонок с уникального номера.");

        $.ajax({
            type: "post",
            url: "/tel_verification",
            processData: false,  // tell jQuery not to process the data
            contentType: false,  // tell jQuery not to set contentType
            async: true,
            data: JSON.stringify(message),
            success: (data) => {
                if(data.success==true){
                    $('.primary-field').hide();
                    $('.verification').show();
//                    if (data.message)
//                    {
//                        show_success(data.message);
//                    }
                }
                else{
                    show_error(data.error);
                    $("#form_submit").children(".spinner-border").addClass('d-none');
                    $("#form_submit").removeAttr("disabled");
                }
            },
            error:function (jqXHR, exception) {
                $("#form_submit").children(".spinner-border").addClass('d-none');
                $("#form_submit").removeAttr("disabled");
                show_error('Что-то пошло не так', false)
            }
        });
    }

    $("#form_submit").click(function(){
//        show_success("Hello <br> world");
        verification();
    });

    $("#code_submit").click(function(){

        $(this).children(".spinner-border").removeClass('d-none');
        $(this).attr("disabled", true);
        message = {}



        if(!(validate_length($('#fio').val(), 3)))
        {
            show_error('Введите ФИО', false);
            $(this).children(".spinner-border").addClass('d-none');
            $(this).removeAttr("disabled");
            return;
        }

        if(!(validate_length($('#tel').val(), 16)))
        {
            show_error('Введите Телефон', false);
            $(this).children(".spinner-border").addClass('d-none');
            $(this).removeAttr("disabled");
            return;
        }

        if ($('#dob').val().length !== 10 || new Date().getFullYear() - new Date($('#dob').val()).getFullYear() > 100) {
            show_error('Дата рождения должна быть корректной и возраст не более 80 лет', false);
            $(this).children(".spinner-border").addClass('d-none');
            $(this).removeAttr("disabled");
            return;
        }

        if ($('#dob').val().length !== 10 || new Date().getFullYear() < new Date($('#dob').val()).getFullYear()) {
            show_error('Проверьте дату ввода, вы указали дату больше чем сегодняшняя дата', false);
            $(this).children(".spinner-border").addClass('d-none');
            $(this).removeAttr("disabled");
            return;
        }

        $.each($('.tg_input'), function(e) {
            message[$(this).prop("id")] = $(this).val();
        });

        message["verification_code"] = $("#kod").val();

        $.ajax({
            type: "post",
            url: "/form_submit",
            processData: false,  // tell jQuery not to process the data
            contentType: false,  // tell jQuery not to set contentType
            async: true,
            data: JSON.stringify(message),
            success: (data) => {
                if(data.success==true){
                    $('.primary-field').hide();
                    $('.verification').hide();
                    $('.success_window').show();
                }
                else{
                    show_error(data.error);
                    $(this).children(".spinner-border").addClass('d-none');
                    $(this).removeAttr("disabled");
                }
            },
            error:function (jqXHR, exception) {
                $(this).children(".spinner-border").addClass('d-none');
                $(this).removeAttr("disabled");
                show_error('Что-то пошло не так', false)
            }
        });
    });

    $("#repeat_call").click(function(){
        verification();
    });

    $('#clear_tel').click(function(){
        phoneStr = '';
        phoneInput.value = formatPhoneString();
    })











//    $('.alert-placeholder').mouseenter(function(){
//        var popOverSettings = {
//            placement: 'bottom',
//            content: $(this).data('content'),
//            trigger: 'hover',
//            container: this,
//            offset: '0'
//        }
//        $(this).popover(popOverSettings);
//        $(this).popover('show');
//        $('.popover').addClass('alert-popover');
//    });
//    $('.alert-placeholder').mouseleave(function(){
//        $('.alert-popover').remove()
//    });



    let phoneStr = '';
    let formattedStr = '';
    let deleteMode = false;
    const phoneInput = document.querySelector('#tel');
    const defaultFormat = '+7({0}{1}{2}){3}{4}{5}-{6}{7}-{8}{9}';
    phoneInput.value = formatPhoneString();

    phoneInput.addEventListener('keydown', (e) => {
      if (e.key === 'Backspace')
        deleteMode = true;
      else
        deleteMode = false;
    });

    phoneInput.addEventListener('input', (e) => {
      if (deleteMode) {
        phoneInput.value = phoneInput.value;
        phoneStr = parsePhoneString(phoneInput.value.replace("+7", "").replace("-", ""));
      } else {
        if (e.inputType == 'insertText' && !isNaN(parseInt(e.data))) {
          if (phoneStr.length <= 9)
            phoneStr += e.data;
        }
        phoneInput.value = formatPhoneString();
      }
    });

    function formatPhoneString() {
      let strArr = phoneStr.split('');
      formattedStr = defaultFormat;
      for (let i = 0; i < strArr.length; i++) {
        formattedStr = formattedStr.replace(`{${i}}`, strArr[i]);
      }

      if (formattedStr.indexOf('{') === -1)
      {
        return formattedStr;
      }
      else
      {
        return formattedStr.substring(0, formattedStr.indexOf('{'));
      }
    }

    function parsePhoneString(str) {
      return str.replace(' ', '').replace('(', '').replace(')', '').replace('-', '');
    }
});


