/**
 * Custom JavaScript for TheGem Child AI Reviews Theme
 */
(function($) { // Modo seguro de jQuery
    'use strict';

    $(document).ready(function() {

        // AJAX Form Submission for AI Tool Ratings
        var ratingForm = $('#aitr-rating-form');

        if (ratingForm.length) { // Solo ejecutar si el formulario existe en la página
            ratingForm.on('submit', function(e) {
                e.preventDefault();

                var form = $(this);
                var formData = form.serializeArray();
                var submitButton = $('#aitr-submit-review');
                var spinner = $('#aitr-form-spinner');
                var messageDiv = $('#aitr-form-message');
                var toolId = form.find('input[name="tool_id"]').val();

                // Validación básica del lado del cliente
                if (form.find('input[name="rating"]:checked').length === 0) {
                    messageDiv.html('<p style="color: red;">' + (aitr_settings.please_select_rating || 'Please select a star rating.') + '</p>');
                    return;
                }
                if ($('#aitr-author').length && ($('#aitr-author').val() === '' || $('#aitr-email').val() === '')) {
                     messageDiv.html('<p style="color: red;">' + (aitr_settings.name_email_required || 'Name and Email are required for guest reviews.') + '</p>');
                    return;
                }

                var dataObject = {};
                $.each(formData, function(i, field){
                    dataObject[field.name] = field.value;
                });

                submitButton.prop('disabled', true).addClass('gem-button-disabled');
                spinner.show();
                messageDiv.html('');

                $.ajax({
                    url: aitr_settings.rest_url + 'aitr/v1/tools/' + toolId + '/rate',
                    method: 'POST',
                    beforeSend: function(xhr) {
                        xhr.setRequestHeader('X-WP-Nonce', aitr_settings.nonce);
                    },
                    data: dataObject,
                    success: function(response) {
                        var successMessage = response.message || (aitr_settings.rating_success || 'Rating submitted successfully.');
                        messageDiv.html('<p style="color: green;">' + successMessage + '</p>');
                        form.trigger('reset');

                        if (response.new_average_rating !== undefined && response.rating_count !== undefined) {
                            var avgHtml = '';
                            var avgRating = parseFloat(response.new_average_rating);
                            for (var i = 1; i <= 5; i++) {
                                if (avgRating >= i) {
                                    avgHtml += '<span class="star filled"><i class="fas fa-star"></i></span>';
                                } else if (avgRating > (i - 0.75) && avgRating < i ) {
                                    avgHtml += '<span class="star half"><i class="fas fa-star-half-alt"></i></span>';
                                } else {
                                    avgHtml += '<span class="star"><i class="far fa-star"></i></span>';
                                }
                            }
                            $('.aitr-average-rating-section .aitr-stars-display').html(avgHtml);

                            var ratingText = avgRating.toFixed(1) +
                                             ' ' + (aitr_settings.out_of_5_stars || 'out of 5 stars') +
                                             ' (' + response.rating_count +
                                             ' ' + (response.rating_count === 1 ? (aitr_settings.vote || 'vote') : (aitr_settings.votes || 'votes')) + ')';
                            $('.aitr-average-rating-section .aitr-rating-text').text(ratingText);
                            
                            // Consider refreshing the comments section or adding the new comment dynamically
                            // For now, a page reload might be needed to see the new comment in the list.
                            // You could add: location.reload(); after a short delay, but it's not ideal UX.
                        }
                    },
                    error: function(xhr) {
                        var errorMessage = (aitr_settings.error_occurred || 'An error occurred. Please try again.');
                        if (xhr.responseJSON && xhr.responseJSON.message) {
                            errorMessage = xhr.responseJSON.message;
                        } else if (xhr.responseText) {
                            try {
                                var errorObj = JSON.parse(xhr.responseText);
                                if (errorObj && errorObj.message) {
                                    errorMessage = errorObj.message;
                                }
                            } catch (e) { /* Do nothing */ }
                        }
                        messageDiv.html('<p style="color: red;">' + errorMessage + '</p>');
                    },
                    complete: function() {
                        submitButton.prop('disabled', false).removeClass('gem-button-disabled');
                        spinner.hide();
                    }
                });
            });
        }
    });
})(jQuery);