/**
 * KNSDD Grup Yönetimi - Toplu İşlemler Modülü
 * 
 * Birden fazla grubu seçip toplu işlem yapma özelliği.
 * İşlemler: Sil, Dışa Aktar, Manuel Pasif Yap, Manuel Aktif Yap
 */
window.KNSDDGroups = window.KNSDDGroups || {};

KNSDDGroups.bulkActions = (function($) {
    'use strict';

    let selectedGroups = new Set();
    const i18n = (typeof knsdd_data !== 'undefined' && knsdd_data.i18n) ? knsdd_data.i18n : {};

    /**
     * Modülü başlat
     */
    const init = () => {
        // Tekil checkbox'lar (event delegation)
        $(document).on('change', '.knsdd-group-checkbox', handleSingleCheckbox);
        
        // Uygula butonu
        $('#knsdd-bulk-apply').on('click', applyBulkAction);
        
        // Dropdown değişimi
        $('#knsdd-bulk-action-select').on('change', handleDropdownChange);
    };

    /**
     * Dropdown değişimi
     */
    const handleDropdownChange = (e) => {
        const action = $(e.target).val();
        
        // Boş seçenek - hiçbir şey yapma
        if (!action) {
            return;
        }
        
        // Tümünü seç/kaldır işlemleri
        if (action === 'select-all') {
            $('.knsdd-group-checkbox').prop('checked', true);
            updateSelection();
            // "Toplu İşlemler" placeholder'a dön
            $(e.target).val('');
            return;
        }
        
        if (action === 'deselect-all') {
            $('.knsdd-group-checkbox').prop('checked', false);
            updateSelection();
            // "Toplu İşlemler" placeholder'a dön
            $(e.target).val('');
            return;
        }
        
        // Diğer işlemler için uygula butonunu güncelle
        updateApplyButton();
    };

    /**
     * Tekil checkbox değişimi
     */
    const handleSingleCheckbox = () => {
        updateSelection();
    };

    /**
     * Seçim durumunu güncelle
     */
    const updateSelection = () => {
        selectedGroups.clear();
        
        $('.knsdd-group-checkbox:checked').each((i, el) => {
            const $row = $(el).closest('tr');
            const group = $row.data('group');
            const statusInfo = knsdd_data.data.statuses[group];
            const isPaused = !!(knsdd_data.data.paused && knsdd_data.data.paused[group]);
            
            selectedGroups.add({
                group: group,
                status: statusInfo ? statusInfo.status : 'unknown',
                isPaused: isPaused
            });
        });
        
        // Seçim sayısını göster
        updateSelectionCount();
        
        // Dropdown seçeneklerini güncelle
        updateDropdownOptions();
        
        // Uygula butonunu güncelle
        updateApplyButton();
    };

    /**
     * Seçim sayısını güncelle
     */
    const updateSelectionCount = () => {
        const count = selectedGroups.size;
        const $wrapper = $('#knsdd-selected-count-wrapper');
        const $count = $('#knsdd-selected-count');
        
        if (count > 0) {
            $count.text(count);
            $wrapper.show();
        } else {
            $wrapper.hide();
        }
    };

    /**
     * Dropdown seçeneklerini güncelle (akıllı filtreleme)
     */
    const updateDropdownOptions = () => {
        const groups = Array.from(selectedGroups);
        
        // Tümünü Seç ve Seçimi Temizle her zaman aktif
        $('#bulk-action-select-all, #bulk-action-deselect-all').prop('disabled', false);
        
        if (groups.length === 0) {
            // Hiçbir grup seçili değilse işlem seçeneklerini devre dışı bırak
            $('#bulk-action-delete, #bulk-action-pause, #bulk-action-unpause').prop('disabled', true);
            return;
        }
        
        // Sadece aktif gruplar var mı?
        const hasActive = groups.some(g => g.status === 'open');
        
        // Manuel pasif gruplar var mı?
        const hasManualPaused = groups.some(g => g.isPaused);
        
        // Seçenekleri aktif/pasif yap
        $('#bulk-action-pause').prop('disabled', !hasActive);
        $('#bulk-action-unpause').prop('disabled', !hasManualPaused);
        
        // Sil her zaman aktif (en az 1 grup seçiliyse)
        $('#bulk-action-delete').prop('disabled', false);
        
        // Tooltip güncelle
        if (!hasActive) {
            $('#bulk-action-pause').attr('title', 
                i18n.bulk_pause_disabled || 'Sadece aktif gruplar için kullanılabilir'
            );
        } else {
            $('#bulk-action-pause').attr('title', '');
        }
        
        if (!hasManualPaused) {
            $('#bulk-action-unpause').attr('title', 
                i18n.bulk_unpause_disabled || 'Sadece manuel pasif gruplar için kullanılabilir'
            );
        } else {
            $('#bulk-action-unpause').attr('title', '');
        }
    };

    /**
     * Uygula butonunu güncelle
     */
    const updateApplyButton = () => {
        const action = $('#knsdd-bulk-action-select').val();
        const hasSelection = selectedGroups.size > 0;
        $('#knsdd-bulk-apply').prop('disabled', !action || !hasSelection);
    };

    /**
     * Toplu işlemi uygula
     */
    const applyBulkAction = () => {
        const action = $('#knsdd-bulk-action-select').val();
        const groups = Array.from(selectedGroups).map(g => g.group);
        
        if (!action || groups.length === 0) {
            showNotice(
                i18n.bulk_no_selection || 'Lütfen bir işlem ve en az bir grup seçin.',
                'error'
            );
            return;
        }
        
        // Onay dialogu (sadece silme için)
        if (action === 'delete') {
            const confirmMsg = (i18n.bulk_delete_confirm || '%d grup silinecek. Emin misiniz?')
                .replace('%d', groups.length);
            
            if (!confirm(confirmMsg)) {
                return;
            }
        }
        
        // Loading durumu
        setLoadingState(true);
        
        // AJAX isteği
        $.ajax({
            url: ajaxurl,
            method: 'POST',
            data: {
                action: 'knsdd_bulk_action',
                nonce: knsdd_data.nonce,
                bulk_action: action,
                groups: groups
            },
            success: (response) => {
                setLoadingState(false);
                
                if (response.success) {
                    showNotice(response.data.message, 'success');
                    
                    // Delete, pause, unpause için sayfayı yenile
                    setTimeout(() => {
                        location.reload();
                    }, 800);
                } else {
                    showNotice(response.data.message, 'error');
                }
            },
            error: (xhr, status, error) => {
                setLoadingState(false);
                showNotice(
                    i18n.bulk_error || 'İşlem sırasında bir hata oluştu.',
                    'error'
                );
                console.error('Bulk action error:', error);
            }
        });
    };

    /**
     * Loading durumunu ayarla
     */
    const setLoadingState = (loading) => {
        const $toolbar = $('.knsdd-bulk-actions-toolbar');
        
        if (loading) {
            $toolbar.addClass('loading');
            $('#knsdd-bulk-apply').prop('disabled', true).text(i18n.processing || 'İşleniyor...');
        } else {
            $toolbar.removeClass('loading');
            $('#knsdd-bulk-apply').prop('disabled', false).text(i18n.apply || 'Uygula');
        }
    };

    /**
     * Bildirim göster
     */
    const showNotice = (message, type) => {
        // Eski bildirimleri kaldır
        $('.knsdd-bulk-notice').remove();
        
        const $notice = $(`
            <div class="notice notice-${type} is-dismissible knsdd-bulk-notice">
                <p>${message}</p>
            </div>
        `);
        
        $('.wrap h1').after($notice);
        
        // WordPress dismiss button
        $notice.find('.notice-dismiss').on('click', function() {
            $notice.fadeOut(300, function() { $(this).remove(); });
        });
        
        // 5 saniye sonra otomatik kapat
        setTimeout(() => {
            $notice.fadeOut(300, function() { $(this).remove(); });
        }, 5000);
    };

    /**
     * Seçimi temizle (dışarıdan erişim için)
     */
    const clearSelection = () => {
        $('.knsdd-group-checkbox').prop('checked', false);
        $('#knsdd-select-all').prop('checked', false);
        updateSelection();
    };

    // Dışarıya açılacak fonksiyonlar
    return {
        init: init,
        clearSelection: clearSelection
    };

})(jQuery);

// Sayfa yüklendiğinde başlat
jQuery(document).ready(function() {
    if (typeof KNSDDGroups !== 'undefined' && KNSDDGroups.bulkActions) {
        KNSDDGroups.bulkActions.init();
    }
});
