/**
 * Sendi API - Admin Settings Scripts
 * 
 * @package LivraisonAPI
 */

(function($) {
    'use strict';

    $(document).ready(function() {
        
        console.log('✅ Sendi API Admin Settings loaded');
        console.log('📊 livraisonSettings:', typeof livraisonSettings !== 'undefined' ? livraisonSettings : 'NON DEFINI');
        
        // ============================================
        // GESTION DES OPTIONS DE LIVRAISON
        // ============================================
        
        var $deliveryMode = $('input[name="livraison_api_delivery_mode"]');
        var $thresholdRow = $('#livraison_threshold_row');
        var $thresholdInput = $('#livraison_api_free_threshold');
        var $thresholdPreview = $('#livraison_threshold_preview');
        var $thresholdDisplay = $('#livraison_threshold_display');
        var $currencyInput = $('#livraison_api_currency');
        
        function updateDeliveryOptions() {
            var mode = $deliveryMode.filter(':checked').val();
            
            if (mode === 'threshold') {
                $thresholdRow.show();
                updateThresholdPreview();
            } else {
                $thresholdRow.hide();
                $thresholdPreview.hide();
            }
            
            $('.livraison-option-card').removeClass('selected');
            $('.livraison-option-card').each(function() {
                var $radio = $(this).find('input[type="radio"]');
                if ($radio.is(':checked')) {
                    $(this).addClass('selected');
                }
            });
        }
        
        function updateThresholdPreview() {
            var seuil = parseInt($thresholdInput.val()) || 0;
            var currency = $currencyInput.val() || 'FCFA';
            
            if (seuil > 0) {
                $thresholdDisplay.text(seuil.toLocaleString());
                $thresholdPreview.show();
            } else {
                $thresholdPreview.hide();
            }
        }
        
        $deliveryMode.on('change', updateDeliveryOptions);
        $thresholdInput.on('input', updateThresholdPreview);
        $currencyInput.on('input', updateThresholdPreview);
        
        updateDeliveryOptions();
        
        // ============================================
        // GESTION DES PAYS ET COMMUNES (ADMIN)
        // ============================================
        
        var $interCountryEnabled = $('#livraison_api_inter_country_enabled');
        var $allowedCountriesWrap = $('#livraison_allowed_countries_wrap');
        var $merchantAddress = $('#livraison_api_pickup_address');
        var $merchantCountry = $('#livraison_api_commercant_country');
        var $pickupCommune = $('#livraison_api_pickup_commune');
        
        // ✅ Stocker toutes les communes avec leur pays
        var allCommunes = [];
        $pickupCommune.find('option').each(function() {
            var $option = $(this);
            var value = $option.val();
            if (value) {
                var text = $option.text();
                var countryMatch = text.match(/\[([A-Z]{2})\]/);
                var country = countryMatch ? countryMatch[1] : 'CI';
                var cleanText = text.replace(/\[[A-Z]{2}\]/, '').trim();
                allCommunes.push({
                    value: value,
                    text: cleanText,
                    country: country,
                    originalText: text
                });
            }
        });
        
        console.log('📊 All communes loaded:', allCommunes.length);
        
        // ✅ Fonction pour filtrer les communes par pays (côté client)
        function filterCommunesByCountry(countryCode) {
            if (!countryCode) return;
            
            console.log('🔍 filterCommunesByCountry appelé avec:', countryCode);
            
            var $pickup = $('#livraison_api_pickup_commune');
            var currentValue = $pickup.val();
            var hasVisible = false;
            var firstVisible = null;
            
            $pickup.find('option').each(function() {
                var $option = $(this);
                var value = $option.val();
                
                if (!value) {
                    $option.show();
                    return;
                }
                
                var commune = allCommunes.find(c => c.value === value);
                if (commune) {
                    if (commune.country === countryCode) {
                        $option.show();
                        hasVisible = true;
                        if (!firstVisible) {
                            firstVisible = value;
                        }
                    } else {
                        $option.hide();
                    }
                } else {
                    $option.show();
                }
            });
            
            if (currentValue && !$pickup.find('option[value="' + currentValue + '"]:visible').length) {
                if (firstVisible) {
                    $pickup.val(firstVisible);
                    console.log('🔄 Commune reset to:', firstVisible);
                } else {
                    $pickup.val('');
                }
            }
        }
        
        // ✅ Fonction pour mettre à jour le select des pays autorisés
        function updateMerchantCountrySelect() {
            console.log('🔍 updateMerchantCountrySelect appelé');
            
            var $merchantCountryField = $('#livraison_api_commercant_country');
            var currentValue = $merchantCountryField.val() || 'CI';
            
            // ✅ Récupérer TOUS les pays autorisés depuis le select multiple
            var allowedCountries = [];
            var $allowedSelect = $('#livraison_api_allowed_countries');
            
            if ($allowedSelect.length) {
                $allowedSelect.find('option').each(function() {
                    var val = $(this).val();
                    if (val && val !== '') {
                        allowedCountries.push(val);
                    }
                });
            }
            
            if (allowedCountries.length === 0) {
                $merchantCountryField.find('option').each(function() {
                    var val = $(this).val();
                    if (val && val !== '') {
                        allowedCountries.push(val);
                    }
                });
            }
            
            if (allowedCountries.length === 0) {
                allowedCountries = ['CI'];
            }
            
            var countryNames = {
                'CI': 'Côte d\'Ivoire',
                'BJ': 'Bénin',
                'BF': 'Burkina Faso',
                'CM': 'Cameroun',
                'SN': 'Sénégal',
                'ML': 'Mali',
                'TG': 'Togo',
                'GH': 'Ghana',
                'NG': 'Nigeria',
                'MA': 'Maroc',
                'FR': 'France'
            };
            
            var $select = $('<select>', {
                id: 'livraison_api_commercant_country',
                name: 'livraison_api_commercant_country',
                class: 'regular-text'
            });
            
            var hasSelected = false;
            $.each(allowedCountries, function(index, code) {
                var name = countryNames[code] || code;
                var $option = $('<option>', {
                    value: code,
                    text: name
                });
                if (code === currentValue) {
                    $option.attr('selected', 'selected');
                    hasSelected = true;
                }
                $select.append($option);
            });
            
            if (!hasSelected && allowedCountries.length > 0) {
                $select.find('option:first').attr('selected', 'selected');
            }
            
            $merchantCountryField.replaceWith($select);
            $merchantCountry = $('#livraison_api_commercant_country');
            
            console.log('✅ Select mis à jour, valeur sélectionnée:', $merchantCountry.val());
        }
        
        // ✅ ✅ ✅ ÉVÉNEMENT CHANGEMENT DU PAYS (AVEC SOUMISSION AUTO)
        $(document).on('change', '#livraison_api_commercant_country', function() {
            var selectedCountry = $(this).val();
            console.log('🔄 Pays du commerçant changé en:', selectedCountry);
            
            if (selectedCountry) {
                // ✅ Mettre à jour l'adresse
                updateMerchantAddress();
                
                // ✅ Filtrer les communes côté client (immédiat)
                filterCommunesByCountry(selectedCountry);
                
                // ✅ SOUMETTRE LE FORMULAIRE AUTOMATIQUEMENT
                console.log('🔄 Soumission automatique du formulaire...');
                $('#livraison-settings-form').submit();
                
                // ✅ ATTENDRE QUE LE FORMULAIRE SOIT SAUVEGARDÉ AVANT DE RECHARGER
                setTimeout(function() {
                    var currentCountry = $('#livraison_api_commercant_country').val() || 'CI';
                    var url = window.location.href.split('?')[0] + '?page=sendi-api-settings';
                    // Ajouter un paramètre pour indiquer le rechargement
                    url += '&reloaded=1';
                    console.log('🔄 Rechargement de la page avec le pays:', currentCountry);
                    window.location.href = url;
                }, 1000);
            }
        });
        
        // ✅ Événement changement de la commune (pour sauvegarde auto)
        $(document).on('change', '#livraison_api_pickup_commune', function() {
            var commune = $(this).val();
            if (commune && commune !== '') {
                // ✅ Mettre à jour le résumé
                $('.livraison-summary-commune').text(commune);
            }
        });
        
        // ============================================
        // GESTION DE L'ADRESSE DU COMMERÇANT
        // ============================================
        
        function updateMerchantAddress() {
            var selectedCountry = $('#livraison_api_commercant_country').val() || 'CI';
            console.log('📍 Mise à jour de l\'adresse pour le pays:', selectedCountry);
            
            var defaultAddresses = {
                'CI': 'Abidjan Cocody Angré Djorogobite lot 1163 îlot 118',
                'BJ': 'Cotonou, Zongo, 01 BP 1234',
                'BF': 'Ouagadougou, Zone 4, 01 BP 5678',
                'CM': 'Douala, Akwa, BP 9012',
                'SN': 'Dakar, Plateau, BP 3456',
                'ML': 'Bamako, Hippodrome, BP 7890',
                'TG': 'Lomé, Tokoin, BP 2345',
                'GH': 'Accra, Osu, PO Box 6789',
                'NG': 'Lagos, Ikeja, PMB 0123',
                'MA': 'Casablanca, Anfa, BP 4567',
                'FR': 'Paris, 75001, 12 Rue de Rivoli'
            };
            
            var currentAddress = $merchantAddress.val();
            var isDefaultAddress = !currentAddress || 
                                   currentAddress === '' || 
                                   currentAddress === 'Abidjan Cocody Angré Djorogobite lot 1163 îlot 118';
            
            if (isDefaultAddress && defaultAddresses[selectedCountry]) {
                $merchantAddress.val(defaultAddresses[selectedCountry]);
                console.log('📍 Adresse mise à jour:', defaultAddresses[selectedCountry]);
            }
        }
        
        // ✅ Gestion de l'activation/désactivation inter-pays
        function updateInternationalDelivery() {
            var isEnabled = $interCountryEnabled.is(':checked');
            console.log('🌍 International Delivery:', isEnabled ? 'ENABLED' : 'DISABLED');
            
            if (isEnabled) {
                $allowedCountriesWrap.slideDown(300);
            } else {
                $allowedCountriesWrap.slideUp(300);
            }
            
            updateMerchantCountrySelect();
        }
        
        // ============================================
        // ✅ ÉVÉNEMENTS
        // ============================================
        
        // ✅ Événement changement inter-pays
        $interCountryEnabled.on('change', function() {
            console.log('🔄 interCountryEnabled changed');
            updateInternationalDelivery();
        });
        
        // ✅ Événement changement des pays autorisés
        $('#livraison_api_allowed_countries').on('change', function() {
            console.log('🔄 allowedCountries changed');
            updateMerchantCountrySelect();
        });
        
        // ============================================
        // INITIALISATION
        // ============================================
        
        if ($interCountryEnabled.length) {
            var isEnabled = $interCountryEnabled.is(':checked');
            console.log('🔍 Initialisation - interCountryEnabled:', isEnabled);
            
            if (isEnabled) {
                $allowedCountriesWrap.show();
            } else {
                $allowedCountriesWrap.hide();
            }
            
            setTimeout(function() {
                updateMerchantCountrySelect();
                updateMerchantAddress();
            }, 300);
        }
        
        // ✅ Vérifier si un rechargement a été effectué
        var urlParams = new URLSearchParams(window.location.search);
        var reloaded = urlParams.get('reloaded');
        if (reloaded) {
            console.log('🔄 Page rechargée après sauvegarde');
            // Nettoyer l'URL
            var cleanUrl = window.location.href.split('?')[0] + '?page=sendi-api-settings';
            window.history.replaceState({}, document.title, cleanUrl);
        }
        
        // ============================================
        // ✅ EXPOSER LES FONCTIONS POUR LE DÉBOGAGE
        // ============================================
        window.filterCommunesByCountry = filterCommunesByCountry;
        window.updateMerchantCountrySelect = updateMerchantCountrySelect;
        
        console.log('✅ Sendi API Admin Settings ready');
        console.log('📊 Fonctions disponibles:', {
            filterCommunesByCountry: typeof window.filterCommunesByCountry,
            updateMerchantCountrySelect: typeof window.updateMerchantCountrySelect
        });
        
        // ============================================
        // API Key visibility toggle
        // ============================================
        $('#livraison_api_key').on('click', function() {
            if (this.type === 'password') {
                this.type = 'text';
                $(this).after('<span class="dashicons dashicons-hidden" style="margin-left: 10px; cursor: pointer;" id="toggle-api-key"></span>');
            } else {
                this.type = 'password';
                $('#toggle-api-key').remove();
            }
        });

        $(document).on('click', '#toggle-api-key', function() {
            var $input = $('#livraison_api_key');
            if ($input.attr('type') === 'password') {
                $input.attr('type', 'text');
                $(this).removeClass('dashicons-hidden').addClass('dashicons-visibility');
            } else {
                $input.attr('type', 'password');
                $(this).removeClass('dashicons-visibility').addClass('dashicons-hidden');
            }
        });

        // ============================================
        // TEST API CONNECTION - AJAX
        // ============================================
        $('#livraison-test-api').on('click', function(e) {
            e.preventDefault();
            
            var $btn = $(this);
            var originalText = $btn.text();
            
            $btn.prop('disabled', true).text('Testing...');
            $('#livraison-test-result').remove();
            
            $.ajax({
                url: livraisonSettings.ajaxUrl,
                type: 'POST',
                data: {
                    action: 'livraison_test_api',
                    nonce: livraisonSettings.nonce
                },
                success: function(response) {
                    var resultHtml = '';
                    if (response.success) {
                        resultHtml = '<div class="notice notice-success" id="livraison-test-result"><p><strong>✅ ' + response.data.message + '</strong></p></div>';
                    } else {
                        resultHtml = '<div class="notice notice-error" id="livraison-test-result"><p><strong>❌ ' + response.data.message + '</strong></p></div>';
                    }
                    $('.livraison-test-api-wrap').after(resultHtml);
                },
                error: function(xhr, status, error) {
                    var resultHtml = '<div class="notice notice-error" id="livraison-test-result"><p><strong>❌ Connection error: ' + error + '</strong></p></div>';
                    $('.livraison-test-api-wrap').after(resultHtml);
                },
                complete: function() {
                    $btn.prop('disabled', false).text(originalText);
                }
            });
        });
        
        // ============================================
        // SAVE MERCHANT INFO - AJAX
        // ============================================
        $('#livraison-save-merchant').on('click', function(e) {
            e.preventDefault();
            
            var $btn = $(this);
            var originalText = $btn.text();
            
            $btn.prop('disabled', true).text('Saving...');
            $('#livraison-save-result').remove();
            
            var formData = {
                action: 'livraison_save_merchant',
                nonce: livraisonSettings.nonce,
                merchant_name: $('#livraison_api_merchant_name').val(),
                merchant_phone: $('#livraison_api_merchant_phone').val(),
                merchant_email: $('#livraison_api_merchant_email').val(),
                pickup_address: $('#livraison_api_pickup_address').val(),
                pickup_commune: $('#livraison_api_pickup_commune').val()
            };
            
            $.ajax({
                url: livraisonSettings.ajaxUrl,
                type: 'POST',
                data: formData,
                success: function(response) {
                    var resultHtml = '';
                    if (response.success) {
                        resultHtml = '<div class="notice notice-success" id="livraison-save-result"><p><strong>✅ ' + response.data.message + '</strong></p></div>';
                        updateSummary(response.data.data);
                    } else {
                        resultHtml = '<div class="notice notice-error" id="livraison-save-result"><p><strong>❌ ' + (response.data.message || 'Save failed') + '</strong></p></div>';
                    }
                    $('.livraison-save-merchant-wrap').after(resultHtml);
                },
                error: function(xhr, status, error) {
                    var resultHtml = '<div class="notice notice-error" id="livraison-save-result"><p><strong>❌ Error saving: ' + error + '</strong></p></div>';
                    $('.livraison-save-merchant-wrap').after(resultHtml);
                },
                complete: function() {
                    $btn.prop('disabled', false).text(originalText);
                }
            });
        });
        
        // ============================================
        // UPDATE SUMMARY
        // ============================================
        function updateSummary(data) {
            if (data.merchant_name) {
                $('.livraison-summary-store').text(data.merchant_name);
            }
            if (data.merchant_phone) {
                $('.livraison-summary-phone').text(data.merchant_phone);
            }
            if (data.merchant_email) {
                $('.livraison-summary-email').text(data.merchant_email);
            }
            if (data.pickup_address) {
                $('.livraison-summary-address').text(data.pickup_address);
            }
            if (data.pickup_commune) {
                $('.livraison-summary-commune').text(data.pickup_commune);
            }
        }
        
        // ============================================
        // AUTO-HIDE NOTICES
        // ============================================
        $(document).on('click', '.notice .notice-dismiss', function() {
            $(this).closest('.notice').slideUp(300);
        });
        
        setTimeout(function() {
            $('.notice-success').fadeOut(500, function() {
                $(this).remove();
            });
        }, 8000);
        
        // ============================================
        // LOGS TABLE - AUTO REFRESH
        // ============================================
        if ($('.livraison-api-logs-table').length) {
            $('.wrap h1').after('<p class="description">Last update: ' + new Date().toLocaleString() + '</p>');
        }

        // ============================================
        // COPY TO CLIPBOARD
        // ============================================
        $('.shortcode-example').on('click', function() {
            var text = $(this).text().trim();
            navigator.clipboard.writeText(text).then(function() {
                showNotification('Shortcode copied to clipboard!', 'success');
            }).catch(function() {
                var $temp = $('<input>');
                $('body').append($temp);
                $temp.val(text).select();
                document.execCommand('copy');
                $temp.remove();
                showNotification('Shortcode copied to clipboard!', 'success');
            });
        });
        
        // ============================================
        // NOTIFICATION HELPER
        // ============================================
        function showNotification(message, type) {
            var $container = $('#livraison-notification-container');
            if ($container.length === 0) {
                $container = $('<div id="livraison-notification-container"></div>');
                $('.wrap h1').after($container);
            }
            var $notification = $('<div class="notice notice-' + type + ' is-dismissible"><p>' + message + '</p></div>');
            $container.empty().append($notification);
            setTimeout(function() {
                $notification.fadeOut(500, function() { $(this).remove(); });
            }, 5000);
        }
        
        // ============================================
        // CONFIRM ON DELETE
        // ============================================
        $('.livraison-delete-btn').on('click', function(e) {
            if (!confirm('Are you sure you want to delete this item?')) {
                e.preventDefault();
            }
        });
        
        // ============================================
        // FORCE SYNC STATUS
        // ============================================
        $('.livraison-force-sync-btn').on('click', function(e) {
            e.preventDefault();
            var $btn = $(this);
            var originalText = $btn.text();
            
            $btn.prop('disabled', true).text('Syncing...');
            
            $.ajax({
                url: livraisonSettings.ajaxUrl,
                type: 'POST',
                data: {
                    action: 'livraison_force_sync',
                    nonce: livraisonSettings.nonce
                },
                success: function(response) {
                    if (response.success) {
                        showNotification('✅ ' + response.data.message, 'success');
                    } else {
                        showNotification('❌ ' + (response.data.message || 'Sync failed'), 'error');
                    }
                },
                error: function() {
                    showNotification('❌ Connection error during sync', 'error');
                },
                complete: function() {
                    $btn.prop('disabled', false).text(originalText);
                }
            });
        });
        
        console.log('✅ Sendi API Admin Settings ready');
        
    });
    
})(jQuery);