jQuery(document).ready(function($) {
    var measuredUnits = ['kg', 'l'];

    // Réplique le calcul serveur (order-page.php) pour afficher en temps réel
    // le total réellement commandé sous le champ quantité.
    function computeTotal(value, packagingQuantity, unit) {
        var v = parseFloat(value);
        if (isNaN(v) || v < 0) v = 0;

        if (packagingQuantity === 0) {
            return v;
        }

        if (measuredUnits.indexOf((unit || '').toLowerCase()) !== -1) {
            // Unité de mesure (kg, L) : arrondir au multiple du conditionnement.
            return (v > 0 && v % packagingQuantity === 0)
                ? v
                : Math.ceil(v / packagingQuantity) * packagingQuantity;
        }

        // Unité discrète : la quantité saisie est un nombre de conditionnements.
        return v * packagingQuantity;
    }

    // Formate un nombre avec les séparateurs décimal/milliers de la langue
    // (fournis par le serveur via les attributs data-*), comme number_format_i18n().
    function formatNumber(value, precision, decimalSep, thousandsSep) {
        var parts = value.toFixed(precision).split('.');
        if (parts.length > 1) {
            parts[1] = parts[1].replace(/0+$/, ''); // retirer les zéros inutiles
        }
        if (thousandsSep) {
            parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, thousandsSep);
        }
        return (parts.length > 1 && parts[1] !== '') ? parts[0] + decimalSep + parts[1] : parts[0];
    }

    function updateRow($input) {
        var packagingQuantity = parseFloat($input.attr('data-packaging')) || 0;
        var unit = $input.attr('data-unit') || '';
        var precision = parseInt($input.attr('data-precision'), 10) || 0;
        var decimalSep = $input.attr('data-decimal');
        if (decimalSep === undefined || decimalSep === '') decimalSep = '.';
        var thousandsSep = $input.attr('data-thousands');
        if (thousandsSep === undefined) thousandsSep = '';
        var singular = $input.attr('data-unit-singular') || '';
        var plural = $input.attr('data-unit-plural') || '';

        var total = computeTotal($input.val(), packagingQuantity, unit);
        var unitDisplay = (total > 1) ? plural : singular;
        if (!unitDisplay) unitDisplay = (unit || 'N/A');

        $input.closest('.quantity-container')
            .find('.quantity-unit')
            .text('(' + formatNumber(total, precision, decimalSep, thousandsSep) + ' ' + unitDisplay + ')');
    }

    $(document).on('input change', '.order-quantity', function() {
        updateRow($(this));
    });
});
