/**
 * Sendi API - Frontend Scripts
 * 
 * @package LivraisonAPI
 */

(function($) {
    'use strict';

    $(document).ready(function() {
        
        console.log('✅ Sendi API Frontend loaded');
        console.log('📊 livraisonFrontend:', livraisonFrontend);
        
        // ============================================
        // GESTION DES PAYS ET COMMUNES
        // ============================================
        var pickupCommune = $('.livraison-shipping-fields').data('pickup-commune') || '';
        var $clientCountry = $('#client_country');
        var $clientCommune = $('#livraison_commune');
        var $priceDisplay = $('#livraison-price-amount');
        var $priceContainer = $('#livraison-price-display');
        var $countryHidden = $('input[name="client_country"]');
        
        console.log('📊 Pickup Commune:', pickupCommune);
        console.log('📊 Client Commune initial:', $clientCommune.val());
        console.log('📊 Client Country initial:', $clientCountry.val() || 'CI');
        
        // ============================================
        // MISE À JOUR DU PRIX
        // ============================================
        function updateShippingPrice(clientCommune) {
            console.log('🔍 updateShippingPrice called with:', clientCommune);
            
            if (!clientCommune || clientCommune === '') {
                $priceDisplay.text('Sélectionnez une commune');
                $priceContainer.show();
                return;
            }
            
            if (!pickupCommune) {
                console.warn('⚠️ Pickup commune not configured');
                $priceDisplay.text('Configuration manquante');
                $priceContainer.show();
                return;
            }
            
            console.log('📊 Calculating price for:', pickupCommune, '→', clientCommune);
            
            $priceDisplay.text('Calcul en cours...');
            $priceContainer.show();
            
            $.ajax({
                url: livraisonFrontend.ajaxUrl,
                type: 'POST',
                data: {
                    action: 'livraison_calculate_price',
                    pickup_commune: pickupCommune,
                    client_commune: clientCommune,
                    payer_type: 'client',
                    order_total: 0,
                    nonce: livraisonFrontend.priceNonce
                },
                timeout: 15000,
                dataType: 'json',
                success: function(response) {
                    console.log('📊 Price response SUCCESS:', response);
                    
                    if (response.success) {
                        var priceText = response.data.price + ' FCFA';
                        $priceDisplay.text(priceText);
                        $priceContainer.show();
                        console.log('✅ Price updated:', priceText);
                    } else {
                        var errorMsg = response.data || 'Erreur de calcul';
                        console.error('❌ Price error:', errorMsg);
                        $priceDisplay.text('Erreur: ' + errorMsg);
                    }
                },
                error: function(xhr, status, error) {
                    console.error('❌ AJAX error:', error);
                    console.error('Status:', status);
                    console.error('Response:', xhr.responseText);
                    
                    var errorMsg = 'Erreur de connexion';
                    
                    if (xhr.status === 0) {
                        errorMsg = 'Impossible de contacter le serveur';
                    } else if (xhr.status === 404) {
                        errorMsg = 'Endpoint non trouvé';
                    } else if (xhr.status === 500) {
                        errorMsg = 'Erreur serveur';
                    } else if (xhr.status === 403) {
                        errorMsg = 'Nonce invalide';
                    } else if (xhr.status === 400) {
                        errorMsg = 'Requête invalide';
                    }
                    
                    $priceDisplay.text(errorMsg);
                }
            });
        }
        
        // ============================================
        // FILTRER LES COMMUNES PAR PAYS
        // ============================================
        function filterCommunesByCountry(countryCode) {
            if (!countryCode) return;
            
            console.log('🔍 Filtering communes by country:', countryCode);
            
            // Récupérer toutes les options
            var $options = $clientCommune.find('option');
            var currentValue = $clientCommune.val();
            var hasVisible = false;
            
            // Parcourir toutes les options
            $options.each(function() {
                var $option = $(this);
                var optionValue = $option.val();
                var optionCountry = $option.data('country') || 'CI';
                
                if (!optionValue) {
                    // L'option "Sélectionnez" reste toujours visible
                    $option.show();
                    return;
                }
                
                // Afficher ou masquer selon le pays
                if (optionCountry === countryCode) {
                    $option.show();
                    hasVisible = true;
                } else {
                    $option.hide();
                }
            });
            
            // Réinitialiser la sélection si la commune actuelle n'est plus visible
            if (currentValue && !$clientCommune.find('option[value="' + currentValue + '"]:visible').length) {
                var firstVisible = $clientCommune.find('option:visible:not([value=""])').first();
                if (firstVisible.length) {
                    $clientCommune.val(firstVisible.val()).trigger('change');
                } else {
                    $clientCommune.val('').trigger('change');
                }
            } else if (!currentValue && hasVisible) {
                var firstVisible = $clientCommune.find('option:visible:not([value=""])').first();
                if (firstVisible.length) {
                    $clientCommune.val(firstVisible.val()).trigger('change');
                }
            }
        }
        
        // ============================================
        // ÉVÉNEMENT CHANGEMENT DE PAYS
        // ============================================
        $clientCountry.on('change', function() {
            var selectedCountry = $(this).val();
            console.log('🔄 Country changed to:', selectedCountry);
            
            // ✅ Mettre à jour le champ caché si présent
            if ($countryHidden.length) {
                $countryHidden.val(selectedCountry);
            }
            
            // ✅ Filtrer les communes
            if (selectedCountry) {
                filterCommunesByCountry(selectedCountry);
            }
            
            // ✅ Recalculer le prix
            var selectedCommune = $clientCommune.val();
            if (selectedCommune && selectedCommune !== '') {
                updateShippingPrice(selectedCommune);
            }
        });
        
        // ============================================
        // ÉVÉNEMENT CHANGEMENT DE COMMUNE
        // ============================================
        $clientCommune.on('change', function() {
            var selectedValue = $(this).val();
            console.log('🔄 Commune changed to:', selectedValue);
            
            if (selectedValue && selectedValue !== '') {
                updateShippingPrice(selectedValue);
            } else {
                $priceDisplay.text('Sélectionnez une commune');
            }
        });
        
        // ============================================
        // INITIALISATION
        // ============================================
        
        // ✅ Initialiser le pays
        var initialCountry = $clientCountry.val() || $countryHidden.val() || 'CI';
        if (initialCountry && initialCountry !== '') {
            console.log('🔄 Initial country filter:', initialCountry);
            // Déclencher l'événement change pour filtrer les communes
            $clientCountry.val(initialCountry).trigger('change');
        }
        
        // ✅ Mettre à jour le prix si une commune est déjà sélectionnée
        var selectedClient = $clientCommune.val();
        if (selectedClient && selectedClient !== '') {
            setTimeout(function() {
                console.log('🔄 Initial price calculation for:', selectedClient);
                updateShippingPrice(selectedClient);
            }, 1000);
        }
        
        // ✅ Forcer la mise à jour après le chargement du DOM
        $(window).on('load', function() {
            var currentVal = $clientCommune.val();
            var currentCountry = $clientCountry.val() || 'CI';
            
            console.log('🔄 Window load - updating...');
            
            // ✅ Rafraîchir le filtre des communes
            if (currentCountry) {
                filterCommunesByCountry(currentCountry);
            }
            
            if (currentVal && currentVal !== '') {
                setTimeout(function() {
                    updateShippingPrice(currentVal);
                }, 500);
            }
        });
        
        // ============================================
        // GESTION DES CHAMPS VERROUILLÉS
        // ============================================
        // Si le pays est verrouillé (input disabled), on ne fait rien
        // Le pays est déjà défini par le serveur
        
        console.log('✅ Sendi API Frontend initialization complete');
        
    });
    
})(jQuery);