{{-- Quick-view inline blok otomatik-kayıt motoru: transfer noktaları, kategoriler, ödeme planı,
     kalıcı select alanları (ulaşım şekli) ve inline Quill blur-kayıt.
     Drawer'a enjekte edilir: delegasyon bir kez bağlanır (global flag), Quill bağlaması her enjeksiyonda idempotent çalışır. --}}
<script>
(function () {
    var CSRF = function () { return (document.querySelector('meta[name="csrf-token"]') || {}).content; };

    function toast(ok, msg) {
        if (typeof Swal === 'undefined') return;
        Swal.mixin({ toast: true, position: 'top-end', showConfirmButton: false, timer: 1800, timerProgressBar: true })
            .fire({ icon: ok ? 'success' : 'error', title: msg || (ok ? 'Kaydedildi' : 'Hata') });
    }

    function send(url, method, payload) {
        return fetch(url, {
            method: method,
            headers: { 'Content-Type': 'application/json', 'X-CSRF-TOKEN': CSRF(), 'X-Requested-With': 'XMLHttpRequest' },
            body: JSON.stringify(payload)
        }).then(function (r) {
            // Sunucu HTML hata sayfası dönerse (500/419) json() patlar; sessiz kalmamak için yakala.
            return r.json().catch(function () {
                return { success: false, message: 'Sunucu hatası (' + r.status + ') — kaydedilemedi.' };
            });
        }).catch(function () {
            return { success: false, message: 'Bağlantı hatası — kaydedilemedi.' };
        });
    }

    // ── Transfer noktaları: blok otomatik kayıt ──
    function collectTransfer(section) {
        var has = section.querySelector('[data-qg-transfer-toggle]');
        var rows = [].slice.call(section.querySelectorAll('.qg-tp-row')).map(function (row, i) {
            var g = function (n) { var el = row.querySelector('[data-tp="' + n + '"]'); return el ? el.value : ''; };
            return { id: g('id') || null, location_name: g('location_name'), pickup_time: g('pickup_time'), notes: g('notes'), sort_order: i };
        }).filter(function (r) { return r.location_name && r.pickup_time; });
        return { has_transfer_points: (has && has.checked) ? 1 : 0, transfer_points: rows };
    }
    var tpT;
    function saveTransfer(section) {
        clearTimeout(tpT);
        tpT = setTimeout(function () {
            send(section.dataset.qvTransferSave, 'POST', collectTransfer(section)).then(function (d) { toast(d.success, d.message); });
        }, 600);
    }

    // ── Kategoriler: change → sync ──
    var catT;
    function saveCategories(wrap) {
        clearTimeout(catT);
        catT = setTimeout(function () {
            var ids = [].slice.call(wrap.querySelectorAll('input[type="checkbox"]:checked')).map(function (c) { return c.value; });
            send(wrap.dataset.qvCatSave, 'POST', { categories: ids }).then(function (d) { toast(d.success, d.message); });
        }, 400);
    }

    // ── Ödeme planı: değişince kaydet ──
    function collectPayplan(form) {
        var rows = [].slice.call(form.querySelectorAll('.qpp-row')).map(function (row) {
            var g = function (n) { var el = row.querySelector('[data-pp="' + n + '"]'); return el ? el.value : ''; };
            return { label: g('label'), percent: g('percent'), trigger: g('trigger'), offset_days: g('offset_days') };
        }).filter(function (r) { return r.label || r.percent; });
        return { payment_plan: rows };
    }
    var ppT;
    function savePayplan(form) {
        clearTimeout(ppT);
        ppT = setTimeout(function () {
            send(form.dataset.qvPayplanSave, 'POST', collectPayplan(form)).then(function (d) { toast(d.success, d.message); });
        }, 600);
    }

    // ── Kalıcı tek alan (ör. ulaşım şekli select): change → update-field ──
    function saveField(el) {
        send(el.dataset.qvUrl, 'PATCH', { field: el.dataset.field, value: el.value }).then(function (d) { toast(d.success, d.message); });
    }

    // ── Hazır tanım (definition) seçimi: içeriği Quill editöre yaz + update-field'e kaydet ──
    function applyTemplate(sel) {
        var opt = sel.options[sel.selectedIndex];
        if (!opt || !opt.value) return;
        var content = opt.getAttribute('data-content') || '';
        var wrap = sel.closest('.qv-quill-wrap');
        if (!wrap) { sel.value = ''; return; }
        var el = wrap.querySelector('.qv-quill');
        var q = el && el.__quill;
        if (q) {
            // Quill modelini de senkronla; boş içerik editörü temizler.
            if (q.clipboard && typeof q.clipboard.dangerouslyPasteHTML === 'function') {
                q.setContents([]);
                if (content) q.clipboard.dangerouslyPasteHTML(content);
            } else {
                q.root.innerHTML = content || '<p><br></p>';
            }
            // Mevcut blur-kayıt bağlamasını tetikle (tek istek + last senkronu)
            q.root.dispatchEvent(new Event('blur'));
        } else {
            // Editör henüz hazır değilse doğrudan kaydet
            var value = (!content || content === '<p><br></p>') ? '' : content;
            send(wrap.dataset.qvQuillSave, 'PATCH', { field: wrap.dataset.field, value: value }).then(function (d) { toast(d.success, d.message); });
        }
        sel.value = ''; // seçim placeholder'a dönsün
    }

    // ── Pazaryeri bazlı fiyatlar (günübirlik pricing): blok otomatik kayıt ──
    function collectMpPrices(wrap) {
        var out = {};
        [].slice.call(wrap.querySelectorAll('.qmp-row')).forEach(function (row) {
            var id = row.dataset.mpId;
            if (!id) return;
            var g = function (n) { var el = row.querySelector('[data-mp="' + n + '"]'); return el ? el.value : ''; };
            out[id] = { adult_price: g('adult_price'), child_price: g('child_price'), infant_price: g('infant_price') };
        });
        return { marketplace_prices: out };
    }
    var mpT;
    function saveMpPrices(wrap) {
        clearTimeout(mpT);
        mpT = setTimeout(function () {
            send(wrap.dataset.qvMppricesSave, 'POST', collectMpPrices(wrap)).then(function (d) { toast(d.success, d.message); });
        }, 600);
    }

    // ── Checkbox grubu → CSV → update-field (ör. günübirlik recurring_days) ──
    var csvT;
    function saveCsvGroup(wrap) {
        clearTimeout(csvT);
        csvT = setTimeout(function () {
            var vals = [].slice.call(wrap.querySelectorAll('input[type="checkbox"]:checked')).map(function (c) { return c.value; });
            send(wrap.dataset.qvCsvSave, 'PATCH', { field: wrap.dataset.field, value: vals.join(',') })
                .then(function (d) { toast(d.success, d.message); });
        }, 400);
    }

    // ── Delegasyon (yalnız bir kez) ──
    if (!window.__qvInlineBlocksDelegated) {
        window.__qvInlineBlocksDelegated = true;

        document.addEventListener('change', function (e) {
            var tp = e.target.closest('[data-qv-transfer-save]'); if (tp) saveTransfer(tp);
            var cat = e.target.closest('[data-qv-cat-save]'); if (cat) saveCategories(cat);
            var pp = e.target.closest('[data-qv-payplan-save]'); if (pp) savePayplan(pp);
            var f = e.target.closest('[data-qv-field-save]'); if (f) saveField(f);
            var csv = e.target.closest('[data-qv-csv-save]'); if (csv) saveCsvGroup(csv);
            var mp = e.target.closest('[data-qv-mpprices-save]'); if (mp) saveMpPrices(mp);
            var tpl = e.target.closest('[data-qv-tpl]'); if (tpl) applyTemplate(tpl);
        });

        document.addEventListener('input', function (e) {
            var tp = e.target.closest('[data-qv-transfer-save]'); if (tp) saveTransfer(tp);
            var pp = e.target.closest('[data-qv-payplan-save]'); if (pp) savePayplan(pp);
            // Pazaryeri fiyatları yalnızca alandan çıkınca (change) kaydedilir — her tuşta değil.
        });

        // Satır silme sonrası (row DOM'dan kaldırıldıktan sonra) blok tekrar kaydedilsin
        document.addEventListener('click', function (e) {
            if (e.target.closest('[data-qg-tp-remove]')) {
                var s = e.target.closest('[data-qv-transfer-save]');
                if (s) setTimeout(function () { saveTransfer(s); }, 60);
            }
            if (e.target.closest('[data-qpp-remove]')) {
                var f = e.target.closest('[data-qv-payplan-save]');
                if (f) setTimeout(function () { savePayplan(f); }, 60);
            }
        });
    }

    // ── Taslağı tamamla / yayına al ──
    window.qvPublishDraft = function (url, btn) {
        if (btn) btn.disabled = true;
        send(url, 'POST', {}).then(function (d) {
            toast(d.success, d.message);
            if (d.success) {
                if (btn) btn.style.display = 'none';
                if (window.PQV && typeof PQV.reload === 'function') PQV.reload('overview', btn);
            } else if (btn) {
                btn.disabled = false;
            }
        });
    };

    // ── Inline Quill blur-kayıt bağlaması (her enjeksiyonda idempotent) ──
    function bindInlineQuills() {
        if (typeof window.qvInitQuills === 'function') window.qvInitQuills(document);
        document.querySelectorAll('.qv-quill-wrap[data-qv-quill-save]').forEach(function (wrap) {
            if (wrap.__inlineBound) return;
            var el = wrap.querySelector('.qv-quill');
            var q = el && el.__quill;
            if (!q) return;
            wrap.__inlineBound = true;
            var url = wrap.dataset.qvQuillSave;
            var field = wrap.dataset.field;
            var last = q.root.innerHTML;
            q.root.addEventListener('blur', function () {
                var html = q.root.innerHTML;
                if (html === last) return;
                last = html;
                var value = (html === '<p><br></p>') ? '' : html;
                send(url, 'PATCH', { field: field, value: value }).then(function (d) { toast(d.success, d.message); });
            });
        });
    }
    bindInlineQuills();
})();
</script>
