/**
 * KNSDD Grup Yönetimi - Modal (Pencere) Yönetim Modülü
 *
 * "Grup Adını Düzenle" penceresinin açılması, kapanması ve AJAX ile
 * kaydedilmesi gibi işlemleri yönetir.
 */
window.KNSDDGroups = window.KNSDDGroups || {};

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

    let $editModal;

    /**
     * Düzenleme penceresini açar ve ilgili grup adıyla doldurur.
     * @param {string} groupName - Düzenlenecek grup adı.
     */
    const open = (groupName) => {
        $editModal.find('#knsdd-old-group-name').val(groupName);
        $editModal.find('#knsdd-edit-group-name').val(groupName).trigger('focus');
        $editModal.show();
    };

    /**
     * Pencereyi kapatır.
     */
    const close = () => {
        $editModal.hide();
    };

    /**
     * Modülün olay dinleyicilerini ve başlangıç ayarlarını yapar.
     * @param {function} onSaveCallback - Kaydetme başarılı olduğunda çağrılacak fonksiyon.
     */
    const init = (onSaveCallback) => {
        $editModal = $('#knsdd-edit-group-modal');

        $('#knsdd-save-group-name').on('click', () => {
            const oldGroup = $('#knsdd-old-group-name').val();
            const newGroup = $('#knsdd-edit-group-name').val().trim();

            if (!newGroup || oldGroup === newGroup) {
                close();
                return;
            }

            ajaxRequest('edit_group', { old_group: oldGroup, new_group: newGroup }, (data) => {
                // Backend kalıcı veriyi güncelliyor ancak frontend state (knsdd_data.data.*)
                // eski anahtarlarla kalıyor olabilir. Sayfayı yenilemeden doğru görünüm için
                // oldGroup -> newGroup anahtar taşımasını yapalım.
                try {
                    const renamedTo = (data && data.new_group) ? data.new_group : newGroup;
                    if (renamedTo && typeof knsdd_data === 'object') {
                        if (!knsdd_data.data) knsdd_data.data = {};
                        const buckets = ['dates', 'statuses', 'rules', 'paused'];
                        buckets.forEach((bucket) => {
                            if (!knsdd_data.data[bucket]) knsdd_data.data[bucket] = {};
                            const store = knsdd_data.data[bucket];
                            if (Object.prototype.hasOwnProperty.call(store, oldGroup)) {
                                // Eğer yeni isim altında veri yoksa taşı, varsa üzerine yazmadan bırak
                                if (!Object.prototype.hasOwnProperty.call(store, renamedTo)) {
                                    store[renamedTo] = store[oldGroup];
                                }
                                delete store[oldGroup];
                            }
                        });
                    }
                } catch (e) {
                    // Sessizce devam et; en kötü ihtimalle sayfa yenilemede düzelir
                }

                close();
                showNotice('success', knsdd_data.i18n.group_name_updated);
                
                // Bildirim panelini güncelle (grup ismi değiştiğinde)
                if (typeof window.KNSDDNotificationPanel !== 'undefined' && window.KNSDDNotificationPanel) {
                    window.KNSDDNotificationPanel.refreshNotifications();
                }
                
                if (onSaveCallback) {
                    onSaveCallback(data);
                }
            });
        });

        $('.knsdd-modal-close, #knsdd-cancel-edit-group').on('click', close);
    };

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

})(jQuery);
