// Bu dosya, tüm KNSDD admin sayfaları tarafından paylaşılan ortak fonksiyonları içerir.

/**
 * Belirtilen türde ve mesajda bir WordPress admin bildirimi gösterir.
 * @param {string} type - Bildirim türü ('success', 'info', 'warning', 'error').
 * @param {string} message - Gösterilecek mesaj.
 * @param {number} [durationMs] - Opsiyonel: ms cinsinden gösterim süresi. Verilmezse türüne göre belirlenir.
 */
function showNotice(type, message, durationMs) {
    const $wrap = jQuery('.wrap');
    // Önceki tüm KNSDD bildirimlerini temizle
    $wrap.find('.knsdd-notice').remove();
    const notice = jQuery(`<div class="knsdd-notice knsdd-notice-${type} notice notice-${type} is-dismissible"><p>${message}</p></div>`);
    $wrap.find('h1').first().after(notice);
    // Süre belirleme: Öncelik parametre -> tür bazlı varsayılanlar
    let autoMs = 4000; // success/info için varsayılan
    if (type === 'error' || type === 'warning') {
        // Uyarılar için ayardan oku; yoksa 5000 ms
        autoMs = 5000;
        try {
            const cfg = (window.knsdd_data && knsdd_data.settings) ? knsdd_data.settings : {};
            const parsed = parseInt(cfg.inline_warning_ms, 10);
            if (!isNaN(parsed) && parsed > 0) { autoMs = parsed; }
        } catch(_e) {}
    }
    const ms = (typeof durationMs === 'number' && isFinite(durationMs) && durationMs > 0) ? durationMs : autoMs;
    setTimeout(() => notice.fadeOut(500, () => notice.remove()), ms);
}

/**
 * Eklentiye özel bir AJAX isteği gönderir.
 * @param {string} action - Çağrılacak AJAX eyleminin adı (knsdd_ ön eki olmadan).
 * @param {object} data - Gönderilecek veri nesnesi.
 * @param {function} successCallback - İstek başarılı olduğunda çalıştırılacak fonksiyon.
 * @param {function} [errorCallback] - İstek başarısız olduğunda (response.success=false) çağrılacak opsiyonel fonksiyon.
 */
function ajaxRequest(action, data, successCallback, errorCallback) {
    // knsdd_data nesnesinin yüklendiğinden emin ol
    if (typeof knsdd_data === 'undefined') {
        console.error('KNSDD: AJAX verisi (knsdd_data) bulunamadı.');
        return;
    }
    
    jQuery.post(knsdd_data.ajax_url, {
        action: `knsdd_${action}`,
        nonce: knsdd_data.nonce,
        ...data
    })
    .done(response => {
        if (response.success) {
            if (typeof successCallback === 'function') {
                successCallback(response.data);
            }
        } else {
            if (typeof errorCallback === 'function') {
                errorCallback(response.data, response);
            } else {
                const errorMsg = (response && response.data && response.data.message) || (knsdd_data.i18n && knsdd_data.i18n.unknown_error) || 'An unknown server error occurred.';
                showNotice('error', errorMsg);
            }
        }
    })
    .fail(() => showNotice('error', (window.knsdd_data && knsdd_data.i18n && knsdd_data.i18n.network_error) ? knsdd_data.i18n.network_error : 'Unable to reach the server. Please check your internet connection.'));
}
