/**
 * Tech Repair Quick Order Form
 */

(function($) {
    'use strict';
    
    // Инициализация при загрузке DOM
    $(document).ready(function() {
        // Открытие формы по классу или ID
        $(document).on('click', '#tech-repair-form-button, .tech-repair-form-button, .open-repair-form', function(e) {
            e.preventDefault();
            openForm($(this));
            loadDevices();
        });
        
        // Закрытие формы
        $(document).on('click', '.tech-repair-form-close', function() {
            closeForm();
        });
        
        // Закрытие формы при клике на модальное окно (вне содержимого)
        $(document).on('click', '.tech-repair-form-modal', function(e) {
            if ($(e.target).hasClass('tech-repair-form-modal')) {
                closeForm();
            }
        });
        
        // Обработка выбора устройства
        $(document).on('change', '#tech-repair-device', function() {
            var deviceId = $(this).val();
            if (deviceId) {
                loadIssues(deviceId);
            } else {
                // Если устройство не выбрано, очищаем список проблем
                $('#tech-repair-issue').html('<option value="">' + '-- ' + techRepairForm.i18n.select_issue + ' --' + '</option>');
                $('#tech-repair-issue').prop('disabled', true);
            }
        });
        
        // Обработка отправки формы
        $(document).on('submit', '#tech-repair-quick-order-form', function(e) {
            e.preventDefault();
            submitQuickOrderForm($(this));
        });
    });
    
    /**
     * Открытие формы
     * 
     * @param {jQuery} triggerElement Элемент, вызвавший открытие формы
     */
    function openForm(triggerElement) {
        var modal = $('#tech-repair-form-modal');
        modal.addClass('active');
        $('body').addClass('tech-repair-form-open');
        
        // Применяем настройки из data-атрибутов, если они есть
        if (triggerElement && triggerElement.length) {
            // Настройка заголовка формы
            if (triggerElement.data('form-title')) {
                $('.tech-repair-form-header h2').text(triggerElement.data('form-title'));
            }
            
            // Настройка подзаголовка формы
            if (triggerElement.data('form-subtitle')) {
                $('.tech-repair-form-header p').text(triggerElement.data('form-subtitle'));
            }
            
            // Настройка текста кнопки отправки
            if (triggerElement.data('submit-text')) {
                $('.tech-repair-submit-button').text(triggerElement.data('submit-text'));
            }
            
            // Предварительный выбор устройства
            if (triggerElement.data('device-id')) {
                var deviceId = triggerElement.data('device-id');
                setTimeout(function() {
                    $('#tech-repair-device').val(deviceId).trigger('change');
                }, 500);
            }
        }
    }
    
    /**
     * Закрытие формы
     */
    function closeForm() {
        var modal = $('#tech-repair-form-modal');
        modal.removeClass('active');
        $('body').removeClass('tech-repair-form-open');
        
        // Сбрасываем форму
        $('#tech-repair-quick-order-form')[0].reset();
        $('#tech-repair-issue').prop('disabled', true);
        $('.tech-repair-form-message').removeClass('success error').hide().html('');
    }
    
    /**
     * Загрузка устройств
     */
    function loadDevices() {
        $.ajax({
            url: techRepairForm.ajax_url,
            type: 'POST',
            data: {
                action: 'get_tech_repair_devices',
                nonce: techRepairForm.nonce
            },
            success: function(response) {
                if (response.success) {
                    var devices = response.data;
                    var options = '<option value="">' + '-- ' + techRepairForm.i18n.select_device + ' --' + '</option>';
                    
                    $.each(devices, function(index, device) {
                        options += '<option value="' + device.id + '">' + device.title + '</option>';
                    });
                    
                    $('#tech-repair-device').html(options);
                }
            }
        });
    }
    
    /**
     * Загрузка проблем для выбранного устройства
     * 
     * @param {number} deviceId ID устройства
     */
    function loadIssues(deviceId) {
        $.ajax({
            url: techRepairForm.ajax_url,
            type: 'POST',
            data: {
                action: 'get_tech_repair_issues',
                device_id: deviceId,
                nonce: techRepairForm.nonce
            },
            beforeSend: function() {
                $('#tech-repair-issue').prop('disabled', true);
            },
            success: function(response) {
                if (response.success) {
                    var issues = response.data;
                    var options = '<option value="">' + '-- ' + techRepairForm.i18n.select_issue + ' --' + '</option>';
                    
                    $.each(issues, function(index, issue) {
                        options += '<option value="' + issue.id + '">' + issue.title + '</option>';
                    });
                    
                    $('#tech-repair-issue').html(options).prop('disabled', false);
                }
            }
        });
    }
    
    /**
     * Отправка формы быстрого заказа
     * 
     * @param {jQuery} form Объект формы
     */
    function submitQuickOrderForm(form) {
        // Валидация формы
        if (!validateForm(form)) {
            return false;
        }
        
        // Получаем данные формы
        var formData = form.serialize();
        
        // Отправляем запрос
        $.ajax({
            url: techRepairForm.ajax_url,
            type: 'POST',
            data: {
                action: 'submit_tech_repair_quick_order',
                form_data: formData,
                nonce: techRepairForm.nonce
            },
            beforeSend: function() {
                // Блокируем кнопку отправки
                form.find('button[type="submit"]').prop('disabled', true).text(techRepairForm.i18n.submitting);
                $('.tech-repair-form-message').removeClass('success error').hide().html('');
            },
            success: function(response) {
                if (response.success) {
                    // Показываем сообщение об успехе
                    $('.tech-repair-form-message').addClass('success').html(techRepairForm.i18n.success).show();
                    
                    // Сбрасываем форму
                    form[0].reset();
                    $('#tech-repair-issue').prop('disabled', true);
                    
                    // Закрываем форму через 3 секунды
                    setTimeout(function() {
                        closeForm();
                    }, 3000);
                } else {
                    // Показываем сообщение об ошибке
                    $('.tech-repair-form-message').addClass('error').html(response.data || techRepairForm.i18n.error).show();
                }
            },
            error: function() {
                // Показываем сообщение об ошибке
                $('.tech-repair-form-message').addClass('error').html(techRepairForm.i18n.error).show();
            },
            complete: function() {
                // Разблокируем кнопку отправки
                form.find('button[type="submit"]').prop('disabled', false).text(techRepairForm.i18n.submit);
            }
        });
        
        return false;
    }
    
    /**
     * Валидация формы
     * 
     * @param {jQuery} form Объект формы
     * @return {boolean} Результат валидации
     */
    function validateForm(form) {
        var isValid = true;
        var message = '';
        
        // Проверка имени
        if (!$('#tech-repair-customer-name').val().trim()) {
            message = techRepairForm.i18n.enter_name;
            isValid = false;
        }
        
        // Проверка email
        else if (!isValidEmail($('#tech-repair-customer-email').val().trim())) {
            message = techRepairForm.i18n.enter_email;
            isValid = false;
        }
        
        // Проверка телефона
        else if (!$('#tech-repair-customer-phone').val().trim()) {
            message = techRepairForm.i18n.enter_phone;
            isValid = false;
        }
        
        // Проверка устройства
        else if (!$('#tech-repair-device').val()) {
            message = techRepairForm.i18n.select_device;
            isValid = false;
        }
        
        // Проверка проблемы
        else if (!$('#tech-repair-issue').val()) {
            message = techRepairForm.i18n.select_issue;
            isValid = false;
        }
        
        // Если есть ошибки, показываем сообщение
        if (!isValid) {
            $('.tech-repair-form-message').addClass('error').html(message).show();
        }
        
        return isValid;
    }
    
    /**
     * Проверка корректности email
     * 
     * @param {string} email Email для проверки
     * @return {boolean} Результат проверки
     */
    function isValidEmail(email) {
        var pattern = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
        return pattern.test(email);
    }
    
})(jQuery);
