/**
 * Yeşil Aksiyon Butonları
 * Acente panelindeki tüm ekleme / kaydetme / oluşturma ve "+" butonlarını
 * tek noktadan yeşile boyar (.btn-action-green sınıfı, app.css içinde tanımlı).
 * MutationObserver ile modallar, quick-view çekmeceleri ve JS ile sonradan
 * üretilen butonlar da kapsanır.
 */
(function () {
    'use strict';

    var CLASS_NAME = 'btn-action-green';

    // Ekleme/kaydetme anlamı taşıyan ikonlar
    var ICON_SELECTOR = [
        '.fa-plus', '.fa-plus-circle', '.fa-circle-plus', '.fa-square-plus',
        '.fa-user-plus', '.fa-calendar-plus', '.fa-cart-plus', '.fa-file-circle-plus',
        '.fa-save', '.fa-floppy-disk', '.fa-floppy-o'
    ].join(', ');

    // Buton olarak değerlendirilecek elemanlar
    var TARGET_SELECTOR = 'button, a.btn, input[type="submit"], input[type="button"], label.btn';

    // Menü/navigasyon öğeleri, kapatma butonları ve özel tasarımlı hızlı-ekle
    // bileşenleri (kendi renk kimlikleri var) kapsam dışı
    var EXCLUDE_SELECTOR = '.dropdown-item, .nav-link, .page-link, .btn-close, .dropdown-toggle-split, .gqa-btn';
    var EXCLUDE_CONTAINER = '.dropdown-menu, .pagination, .ql-toolbar, .gqa-overlay, .gqr-overlay';

    var TR_LETTER = 'a-zçğıöşü';
    // "ekle" kelime olarak (ör. "Müşteri Ekle") — "bekle", "ekler" gibi kelimeleri dışlar
    var RE_EKLE = new RegExp('(^|[^' + TR_LETTER + '])ekle($|[^' + TR_LETTER + '])');
    var RE_OTHER = /kaydet|oluştur|güncelle/;

    function normalize(text) {
        return (text || '').toLocaleLowerCase('tr-TR').replace(/\s+/g, ' ').trim();
    }

    function matchesText(text) {
        if (!text) return false;
        if (text === '+') return true;
        return RE_EKLE.test(text) || RE_OTHER.test(text);
    }

    function isActionButton(el) {
        if (el.classList.contains(CLASS_NAME)) return false;
        if (el.matches(EXCLUDE_SELECTOR)) return false;
        if (el.closest(EXCLUDE_CONTAINER)) return false;

        var text = el.tagName === 'INPUT' ? normalize(el.value) : normalize(el.textContent);
        if (matchesText(text)) return true;

        // Metni eşleşmeyen ama "+" / kaydet ikonlu butonlar
        if (el.tagName !== 'INPUT' && el.querySelector(ICON_SELECTOR)) return true;

        return false;
    }

    function paint(root) {
        var candidates = (root.querySelectorAll ? root : document).querySelectorAll(TARGET_SELECTOR);
        candidates.forEach(function (el) {
            if (isActionButton(el)) {
                el.classList.add(CLASS_NAME);
            }
        });
    }

    function init() {
        paint(document);

        var scheduled = false;
        var observer = new MutationObserver(function () {
            if (scheduled) return;
            scheduled = true;
            requestAnimationFrame(function () {
                scheduled = false;
                paint(document);
            });
        });
        observer.observe(document.body, { childList: true, subtree: true });
    }

    if (document.readyState === 'loading') {
        document.addEventListener('DOMContentLoaded', init);
    } else {
        init();
    }
})();
