jQuery(document).ready(function($) {

    // 1. Hole die Daten, die via wp_add_inline_script() übergeben wurden:
    const {
        ajaxUrl,
        updateRankingNonce,
        removeRankingNonce,
        currentPostId
    } = boxyfyRankingData || {};

    // 2. Drag-and-Drop mit jQuery UI Sortable
    $('#ranking-list').sortable({
        items: 'li',
        cursor: 'move',
        update: function () {
            let updatedRankings = {};
            $('#ranking-list li').each(function(index) {
                let newRanking = index + 1;
                let postId     = $(this).data('post-id');
                $(this).find('.current-ranking').text(newRanking);
                $(this).find('.ranking-hidden-input').val(newRanking);
                updatedRankings[postId] = newRanking;

                // Falls das aktuelle Produkt, update das input-Feld oben
                if (parseInt(postId, 10) === parseInt(currentPostId, 10)) {
                    $('#boxyfy_product_ranking_field').val(newRanking);
                }
            });
            // AJAX-Aufruf
            if ($('#ranking-list li').length > 0) {
                $.post(ajaxUrl, {
                    action: 'update_product_rankings',
                    rankings: updatedRankings,
                    nonce: updateRankingNonce
                }, function(response) {
                    if (!response.success) {
                        alert('Fehler beim Speichern der Rankings.');
                    }
                });
            }
        }
    });

    // 3. Manuelle Eingabe des Rankings oben
    $('#boxyfy_product_ranking_field').on('change', function() {
        let newRanking = parseInt($(this).val(), 10);
        if (isNaN(newRanking) || newRanking < 1) {
            alert('Bitte geben Sie eine gültige Ranking-Nummer ein (mindestens 1).');
            $(this).val('');
            return;
        }
        let currentLi = $('#ranking-list li[data-post-id="' + currentPostId + '"]');
        let totalProducts = $('#ranking-list li').length;
        if (newRanking > totalProducts) {
            newRanking = totalProducts;
        }
        // Entferne den Eintrag, füge ihn neu ein
        currentLi.detach();
        let targetIndex = newRanking - 1;
        if (targetIndex >= $('#ranking-list li').length) {
            $('#ranking-list').append(currentLi);
        } else {
            $('#ranking-list li').eq(targetIndex).before(currentLi);
        }
        // Alle neu durchnummerieren
        let normalizedRankings = {};
        $('#ranking-list li').each(function(index) {
            let updatedRanking = index + 1;
            let pid = $(this).data('post-id');
            $(this).data('ranking', updatedRanking);
            $(this).find('.current-ranking').text(updatedRanking);
            $(this).find('.ranking-hidden-input').val(updatedRanking);

            if (parseInt(pid, 10) === parseInt(currentPostId, 10)) {
                $('#boxyfy_product_ranking_field').val(updatedRanking);
            }
            normalizedRankings[pid] = updatedRanking;
        });
        if ($('#ranking-list li').length > 0) {
            $.post(ajaxUrl, {
                action: 'update_product_rankings',
                rankings: normalizedRankings,
                nonce: updateRankingNonce
            }, function(response) {
                if (!response.success) {
                    alert('Fehler beim Speichern der Rankings.');
                }
            });
        }
    });

    // 4. Bewertung ändern
    $('.product-rating-input').on('change', function() {
        let $input = $(this);
        let newRating = parseInt($input.val(), 10);
        if (isNaN(newRating) || newRating < 0) {
            alert('Bitte geben Sie eine gültige Bewertung (>= 0) ein.');
            return;
        }
        $.post(ajaxUrl, {
            action: 'update_product_rating',
            nonce: updateRankingNonce,
            post_id: $input.data('post-id'),
            new_rating: newRating
        }, function(response) {
            if (!response.success) {
                alert(response.data ? response.data : 'Fehler beim Speichern der Bewertung.');
            }
        });
    });

    // 5. Button "Produkt aus Ranking entfernen"
    $('#remove-product-ranking').on('click', function() {
        if (!confirm('Möchten Sie das Produkt wirklich aus dem Ranking entfernen?')) {
            return;
        }
        $.post(ajaxUrl, {
            action: 'remove_product_ranking',
            nonce: removeRankingNonce,
            post_id: currentPostId
        }, function(response) {
            if (response.success) {
                alert('Produkt wurde aus dem Ranking entfernt.');
                $('#ranking-list li[data-post-id="' + currentPostId + '"]').remove();
                $('#boxyfy_product_ranking_field').val('');
            } else {
                alert(response.data ? response.data : 'Fehler beim Entfernen des Rankings.');
            }
        });
    });

});
