{{-- EKSTRA HİZMET KARTI — müşteri Künyesiyle AYNI defter (ledger) tasarımı.

     Alan panelleri components/quick-view/ledger-card + ledger-row ile çizilir:
     her alan tek satır, tıkla → yerinde düzenle, blur/Enter → update-field'e PATCH,
     hover'da kopyala/düzenle, boş alanlar soluk placeholder ile görünür.

     Ledger'a satır olarak sığmayan iki blok aynı dilde ayrıca tasarlandı:
       • Tutar Dökümü (.esr) — makbuz kuyruğu: sağa hizalı rakamlar, toplamdan
         önce kesikli ayraç. Fiyat/vergi satırları düzenlenince ANINDA yeniden
         hesaplanır (pfx:saved olayı), başlıktaki ölçüler de eşitlenir.
       • İlişkili Satışlar (.ess) — kart içinde kart yok; kıl payı çizgili
         hareket satırları, hover'da müşteri kartına atlama düğmesi.

     Not: bileşen etiketi içindeki route() tek tırnakla yazılır; çift tırnak
     Blade'in x-component ayrıştırıcısını erken kapatıp derlemeyi bozuyor. --}}
@php
    $editBase = 'agency.products.extra-services';
    $uf = route("$editBase.update-field", $service);

    $boolOptions = [['value' => '1', 'label' => 'Evet'], ['value' => '0', 'label' => 'Hayır']];

    $categoryOptions = collect([['value' => '', 'label' => 'Kategorisiz']])
        ->merge($categories->map(fn ($c) => ['value' => (string) $c->id, 'label' => $c->name]))->values()->all();

    $taxOptions = collect([['value' => '', 'label' => 'Vergisiz']])
        ->merge($taxRates->map(fn ($t) => [
            'value' => (string) (float) $t->rate,
            'label' => $t->name . ' %' . rtrim(rtrim(number_format((float) $t->rate, 2, ',', '.'), '0'), ','),
        ]))->values()->all();

    $unitOptions = collect([['value' => '', 'label' => 'Birimsiz']])
        ->merge(collect($units)->map(fn ($l, $v) => ['value' => $v, 'label' => $l])->values())->values()->all();

    $currencyOptions = $currencies->map(fn ($c) => ['value' => $c->code, 'label' => $c->code])->values()->all();
    if (! $currencyOptions) {
        $currencyOptions = [['value' => 'TRY', 'label' => 'TRY']];
    }

    // Tutar dökümü: vergi dahil girildiyse net geri hesaplanır
    $rate = $service->tax_rate !== null ? (float) $service->tax_rate : null;
    $price = (float) $service->price;
    if ($rate === null) {
        $net = $price; $tax = 0.0; $gross = $price;
    } elseif ($service->tax_included) {
        $net = round($price / (1 + $rate / 100), 2); $gross = $price; $tax = round($gross - $net, 2);
    } else {
        $net = $price; $tax = round($price * $rate / 100, 2); $gross = round($price + $tax, 2);
    }
    $num = fn ($v) => number_format($v, 2, ',', '.');
    $money = fn ($v) => $num($v) . ' ' . $service->currency;
    $ratePretty = $rate === null ? '' : rtrim(rtrim(number_format($rate, 2, ',', '.'), '0'), ',');
    $taxRowLabel = $rate === null ? 'Vergi' : (($service->tax_name ?: 'Vergi') . ' (%' . $ratePretty . ')');

    // Toplamın nereden geldiğini tek satırda anlatır — blok, aritmetiğin ötesinde
    // yalnızca bu bilgiyi ekler.
    $formula = $rate === null
        ? 'Vergi tanımlı değil; net ve satış tutarı aynıdır.'
        : ($service->tax_included
            ? $num($gross) . ' ÷ ' . number_format(1 + $rate / 100, 2, ',', '.') . ' = ' . $num($net) . ' net  ·  fiyat vergi dahil girilmiş'
            : $num($net) . ' × %' . $ratePretty . ' = ' . $num($tax) . ' vergi  ·  fiyat vergi hariç girilmiş');

    /** Tek satır tanımı — müşteri Künyesindeki $row ile aynı sözleşme. */
    $row = function (string $label, ?string $field, $value, ?string $text = null, array $o = []) {
        return [
            'label' => $label,
            'field' => $field,
            'type' => $o['type'] ?? 'text',
            'value' => $value === null ? '' : (string) $value,
            'text' => $text === null ? ($value === null ? '' : (string) $value) : $text,
            'options' => $o['options'] ?? null,
            'mono' => $o['mono'] ?? false,
            'ph' => $o['ph'] ?? null,
        ];
    };
@endphp

<x-quick-view.layout data-pqv-selfurl="{{ route($editBase . '.quick-view', $service) }}">
    {{-- slim: minimal başlık — avatar yok, başlık + rozetler tek şeritte (sabit QV tasarımı) --}}
    <x-quick-view.header :slim="true" :title-field="'name'" :title-url="$uf" :title-value="$service->name"
        :title-required="true" :title-placeholder="'Hizmet adı'">
        <x-slot:subtitle>
            {{-- Header'da avatar yok (slim); yığın tutamağı ikonu buradan okur --}}
            <span data-qv-avatar hidden><i class="fas fa-tags"></i></span>
            <span class="pqv-badge {{ $service->is_active ? 'pqv-b-green' : 'pqv-b-slate' }}">{{ $service->is_active ? 'Aktif' : 'Pasif' }}</span>
            <span class="text-muted small fw-600"><i class="fas fa-hashtag" style="font-size:.7rem"></i> {{ $service->code ?? '—' }}</span>
            <span class="pqv-badge {{ $service->category ? 'pqv-b-indigo' : 'pqv-b-slate' }}">
                <i class="fas fa-folder" style="font-size:.68rem"></i> {{ $service->category?->name ?? 'Kategorisiz' }}
            </span>
        </x-slot:subtitle>

        <x-slot:metrics>
            <div class="qv-metric">
                <span class="qv-metric-label">FİYAT</span>
                <span class="qv-metric-val" data-esq-metric="price">{{ $money($price) }}</span>
            </div>
            <div class="qv-metric">
                <span class="qv-metric-label" data-esq-metric="grossLabel">{{ $rate === null ? 'VERGİSİZ' : 'VERGİ DAHİL' }}</span>
                <span class="qv-metric-val text-success" data-esq-metric="gross">{{ $money($gross) }}</span>
            </div>
        </x-slot:metrics>

        <x-slot:tabs>
            <x-quick-view.tab id="overview" label="Genel Bilgiler" icon="fas fa-info-circle" active="true" />
            <x-quick-view.tab id="sales"    label="İlişkili Satışlar" icon="fas fa-cash-register" :count="$relatedSalesTotal ?? 0" />
            <x-quick-view.tab id="settings" label="Ayarlar" icon="fas fa-cog" />
        </x-slot:tabs>
    </x-quick-view.header>

    <x-quick-view.content>
        {{-- ── GENEL ── --}}
        <div id="qv-tab-overview" class="qv-tab-panel active">
            <x-quick-view.main class="border-0">
                <div class="qv-left-stack" data-esq data-esq-cur="{{ $service->currency }}">

                    {{-- Künye: hizmetin tüm alanları tek defterde --}}
                    @include('components.quick-view.ledger-card', ['card' => [
                        'title' => 'Hizmet Künyesi',
                        'icon' => 'fa-tags',
                        'url' => $uf,
                        'sections' => [
                            ['title' => 'Tanım', 'icon' => 'fa-circle-info', 'rows' => [
                                $row('Hizmet Adı', 'name', $service->name, null, ['ph' => 'Örn. VQ Alan Vergisi']),
                                $row('Kategori', 'category_id', (string) ($service->category_id ?? ''), $service->category?->name ?? '', ['type' => 'select', 'options' => $categoryOptions, 'ph' => 'Kategorisiz']),
                                $row('Fiyat Birimi', 'unit', (string) ($service->unit ?? ''), $service->unit_label ?? '', ['type' => 'select', 'options' => $unitOptions, 'ph' => 'Birimsiz']),
                                $row('Açıklama', 'description', $service->description, null, ['type' => 'textarea', 'ph' => 'Bu hizmet neyi kapsıyor?']),
                            ]],
                            ['title' => 'Fiyatlandırma', 'icon' => 'fa-coins', 'rows' => [
                                $row('Fiyat', 'price', $service->price, $num($price), ['type' => 'number', 'mono' => true]),
                                $row('Para Birimi', 'currency', $service->currency, $service->currency, ['type' => 'select', 'options' => $currencyOptions]),
                                $row('Vergi Oranı', 'tax_rate', $rate !== null ? (string) $rate : '', $rate === null ? '' : $service->tax_label, ['type' => 'select', 'options' => $taxOptions, 'ph' => 'Vergisiz']),
                            ]],
                        ],
                    ]])

                    {{-- Tutar dökümü — makbuz kuyruğu. Fiyat/vergi düzenlenince anında tazelenir. --}}
                    <div class="pfx" data-esq-receipt data-url="{{ $uf }}">
                        <div class="pfx-top">
                            <span class="pfx-top-t"><i class="fas fa-receipt"></i> Tutar Dökümü</span>
                            <button type="button" class="pfx-chip" data-a="copy-block"
                                    data-copy-block="Net: {{ $money($net) }}&#10;{{ $taxRowLabel }}: {{ $money($tax) }}&#10;Satış Tutarı: {{ $money($gross) }}"
                                    title="Dökümü kopyala">
                                <i class="fas fa-clone"></i> Kopyala
                            </button>
                        </div>

                        <div class="pfx-body esr">
                            <div class="esr-r">
                                <span class="esr-l">Net Tutar</span>
                                <span class="esr-n"><i data-esr="net">{{ $num($net) }}</i><small data-esr="cur">{{ $service->currency }}</small></span>
                            </div>
                            <div class="esr-r {{ $tax > 0 ? 'tax' : 'zero' }}" data-esr-taxrow>
                                <span class="esr-l" data-esr="taxLabel">{{ $taxRowLabel }}</span>
                                <span class="esr-n"><i data-esr="tax">{{ $num($tax) }}</i><small data-esr="cur">{{ $service->currency }}</small></span>
                            </div>
                            <div class="esr-r sum">
                                <span class="esr-l">Satış Tutarı</span>
                                <span class="esr-n"><i data-esr="gross">{{ $num($gross) }}</i><small data-esr="cur">{{ $service->currency }}</small></span>
                            </div>

                            <p class="esr-f" data-esr="formula">{{ $formula }}</p>
                        </div>

                        {{-- Fiyata vergi dahil mi: dökümü doğrudan çevirdiği için burada,
                             defter satırı olarak. Vergi yoksa satır anlamsız → gizlenir. --}}
                        <section class="pfx-sec" data-esq-inclsec style="{{ $rate === null ? 'display:none' : '' }}">
                            @include('components.quick-view.ledger-row', ['r' => $row('Fiyata Vergi Dahil', 'tax_included', $service->tax_included ? '1' : '0', $service->tax_included ? 'Evet' : 'Hayır', ['type' => 'select', 'options' => $boolOptions])])
                        </section>

                        <div class="pfx-note">
                            <i class="fas fa-circle-info"></i>
                            @if($service->unit_label)
                                Tutarlar <b>{{ $service->unit_label }}</b> üzerindendir.
                            @else
                                Vergi oranını değiştirdiğinizde döküm ve başlıktaki tutarlar anında yenilenir.
                            @endif
                        </div>
                    </div>
                </div>
            </x-quick-view.main>
        </div>

        {{-- ── İLİŞKİLİ SATIŞLAR ── --}}
        <div id="qv-tab-sales" class="qv-tab-panel">
            <x-quick-view.main class="border-0">
                <div class="qv-left-stack">
                    <div class="pfx">
                        <div class="pfx-top">
                            <span class="pfx-top-t"><i class="fas fa-cash-register"></i> İlişkili Satışlar</span>
                            @if(($relatedSalesTotal ?? 0) > 0)
                                <span class="ess-stat"><b>{{ $relatedSalesTotal }}</b> satış</span>
                            @endif
                        </div>

                        @forelse(($relatedSales ?? collect()) as $sale)
                            <div class="ess-r" role="button" tabindex="0" title="Satış kartını aç"
                                 onclick="openSaleDrawer({{ $sale->id }})"
                                 onkeydown="if(event.key==='Enter'){openSaleDrawer({{ $sale->id }})}">
                                <span class="ess-code">#{{ $sale->sale_code }}</span>
                                <span class="ess-main">
                                    <b>{{ $sale->customer?->full_name ?: 'Müşterisiz' }}</b>
                                    <em>
                                        <span class="ess-dot" style="background:{{ $sale->status_color }}"></span>{{ $sale->status_label }}
                                        · {{ $sale->created_at?->format('d.m.Y') }}
                                    </em>
                                </span>
                                <span class="ess-amt">{{ number_format((float) $sale->total_amount, 2, ',', '.') }}<small>{{ $sale->currency }}</small></span>
                                <span class="ess-a">
                                    @if($sale->customer_id)
                                        <button type="button" class="pfx-b" tabindex="-1" title="Müşteri kartını aç"
                                                onclick="event.stopPropagation(); openCustomerDrawer({{ $sale->customer_id }})">
                                            <i class="fas fa-user"></i>
                                        </button>
                                    @endif
                                    <button type="button" class="pfx-b" tabindex="-1" title="Satış kartını aç"
                                            onclick="event.stopPropagation(); openSaleDrawer({{ $sale->id }})">
                                        <i class="fas fa-arrow-right"></i>
                                    </button>
                                </span>
                            </div>
                        @empty
                            <div class="ess-none">
                                <i class="fas fa-cash-register"></i>
                                <b>Henüz bir satışa eklenmemiş</b>
                                <span>Satış kartındaki <b>Ürün &amp; Hizmet Kataloğu → Ekstra Hizmetler</b>
                                      sekmesinden eklendiğinde burada listelenir.</span>
                            </div>
                        @endforelse

                        @if(($relatedSalesTotal ?? 0) > ($relatedSales ?? collect())->count())
                            <div class="pfx-note">
                                <i class="fas fa-ellipsis"></i>
                                Son {{ ($relatedSales ?? collect())->count() }} satış gösteriliyor —
                                toplam {{ $relatedSalesTotal }} satışta kullanılmış.
                            </div>
                        @endif
                    </div>
                </div>
            </x-quick-view.main>
        </div>

        {{-- ── AYARLAR ── --}}
        <div id="qv-tab-settings" class="qv-tab-panel">
            <x-quick-view.main class="border-0">
                <div class="qv-left-stack">

                    @include('components.quick-view.ledger-card', ['card' => [
                        'title' => 'Ayarlar',
                        'icon' => 'fa-cog',
                        'url' => $uf,
                        'class' => 'pfx-lw',
                        'note' => 'Pasif hizmetler satış kartındaki Ekstra Hizmetler listesinde görünmez. Ekstra hizmetler bir satış kanalı değildir: tek başına satılmaz, mevcut bir satışa ek kalem olarak eklenir.',
                        'sections' => [
                            ['title' => 'Durum & Sıralama', 'icon' => 'fa-toggle-on', 'rows' => [
                                $row('Aktif', 'is_active', $service->is_active ? '1' : '0', $service->is_active ? 'Evet' : 'Hayır', ['type' => 'select', 'options' => $boolOptions]),
                                $row('Liste Sırası', 'sort_order', $service->sort_order, $service->sort_order === null ? '' : (string) $service->sort_order, ['type' => 'number', 'mono' => true, 'ph' => '0']),
                            ]],
                        ],
                    ]])

                    @include('components.quick-view.ledger-card', ['card' => [
                        'title' => 'Kayıt Bilgileri',
                        'icon' => 'fa-clock-rotate-left',
                        'class' => 'pfx-lw',
                        'sections' => [
                            ['title' => 'Sistem', 'icon' => 'fa-database', 'muted' => true, 'rows' => [
                                $row('Hizmet No', null, '#' . ($service->code ?? $service->id), null, ['mono' => true]),
                                $row('Oluşturan', null, $service->creator?->name),
                                $row('Oluşturma', null, $service->created_at?->format('d.m.Y H:i'), null, ['mono' => true]),
                                $row('Son Güncelleme', null, $service->updated_at?->format('d.m.Y H:i'), null, ['mono' => true]),
                            ]],
                        ],
                    ]])

                    {{-- Geri alınamaz işlem: defter dilinde, ama kırmızı kıl payı çizgiyle ayrışır --}}
                    <div class="pfx esd">
                        <div class="pfx-top">
                            <span class="pfx-top-t"><i class="fas fa-triangle-exclamation"></i> Hizmeti Sil</span>
                        </div>
                        <div class="pfx-body esd-b">
                            <p>Silinen hizmet satış ekranındaki listede görünmez.
                               <b>Geçmiş satışlardaki kalemler etkilenmez</b> — tutarlar olduğu gibi kalır.</p>
                            {{-- Silme sonrası kayıt yok: quick-view yenilenemez, drawer kapatılıp liste tazelenir --}}
                            <button type="button" class="esd-btn"
                                    onclick="esqDelete('{{ route("$editBase.destroy", $service) }}', @js($service->name))">
                                <i class="fas fa-trash"></i> Bu hizmeti sil
                            </button>
                        </div>
                    </div>
                </div>
            </x-quick-view.main>
        </div>
    </x-quick-view.content>
</x-quick-view.layout>

@once
<style>
    /* ═══ Tutar dökümü — makbuz kuyruğu ═══
       Defterin tek vurgusu rakamlardır: sağa hizalı, tabular, para birimi soluk
       bir sonek. Toplamdan önce kesikli ayraç (makbuz koparma çizgisi). */
    .esr-r { display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: baseline; gap: 1rem; padding: 5px 0; }
    .esr-r + .esr-r { border-top: 1px solid #f4f7fb; }
    .esr-l {
        font-size: .63rem; font-weight: 700; letter-spacing: .03em; text-transform: uppercase; color: #9aa7bb;
        overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
    }
    .esr-n {
        font-size: .86rem; font-weight: 750; color: #334155;
        font-variant-numeric: tabular-nums; letter-spacing: -.01em; white-space: nowrap;
    }
    .esr-n i { font-style: normal; }
    .esr-n small { font-size: .64rem; font-weight: 700; color: #c3cddc; margin-left: 5px; }
    .esr-r.tax .esr-n i { color: #b45309; }
    .esr-r.zero .esr-n i { color: #cbd5e1; }

    .esr-r.sum { margin-top: 4px; padding-top: 9px; border-top: 1px dashed #d7e0ec; }
    .esr-r.sum .esr-l { font-size: .68rem; font-weight: 800; color: #0f172a; letter-spacing: -.01em; text-transform: none; }
    .esr-r.sum .esr-n { font-size: 1.1rem; font-weight: 850; color: #0f172a; letter-spacing: -.03em; }
    .esr-r.sum .esr-n small { font-size: .68rem; color: #94a3b8; }

    .esr-f {
        margin: .55rem 0 0; padding-top: .45rem; border-top: 1px solid #f4f7fb;
        font-size: .66rem; font-weight: 600; color: #b6c2d2; line-height: 1.5;
        font-variant-numeric: tabular-nums;
    }

    /* "Fiyata vergi dahil" satırı dökümün içinde: kart içinde kart görünmesin */
    [data-esq-inclsec] { border-top: 1px solid #f1f5f9; padding: 2px 0; }

    /* ═══ İlişkili satışlar — hareket satırları ═══ */
    .ess-stat {
        display: inline-flex; align-items: center; gap: 4px;
        border: 1px solid #e2e8f0; background: #fff; color: #64748b;
        border-radius: 999px; padding: 2px 9px; font-size: .64rem; font-weight: 700; white-space: nowrap;
    }
    .ess-stat b { font-weight: 850; color: #0f172a; font-variant-numeric: tabular-nums; }

    .ess-r {
        display: grid; grid-template-columns: auto minmax(0, 1fr) auto 46px;
        align-items: center; gap: .6rem;
        padding: 7px .7rem; border-top: 1px solid #f4f7fb; cursor: pointer;
        transition: background .12s;
    }
    .ess-r:hover { background: #f7faff; }
    .ess-r:focus-visible { outline: 2px solid #2563eb; outline-offset: -2px; }

    .ess-code {
        font-size: .66rem; font-weight: 800; color: #1d4ed8; background: #eff6ff;
        border-radius: 6px; padding: 2px 7px; font-variant-numeric: tabular-nums; white-space: nowrap;
    }
    .ess-main { min-width: 0; display: flex; flex-direction: column; gap: 1px; }
    .ess-main b {
        font-size: .8rem; font-weight: 700; color: #0f172a; letter-spacing: -.01em;
        overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
    }
    .ess-main em {
        font-style: normal; font-size: .66rem; font-weight: 600; color: #94a3b8;
        display: flex; align-items: center; gap: 5px; white-space: nowrap;
    }
    .ess-dot { width: 6px; height: 6px; border-radius: 50%; flex: none; }

    .ess-amt {
        font-size: .82rem; font-weight: 800; color: #0f172a;
        font-variant-numeric: tabular-nums; letter-spacing: -.01em; white-space: nowrap;
    }
    .ess-amt small { font-size: .62rem; font-weight: 700; color: #c3cddc; margin-left: 4px; }

    .ess-a { display: flex; gap: 1px; justify-content: flex-end; opacity: 0; transition: opacity .13s; }
    .ess-r:hover .ess-a, .ess-r:focus-within .ess-a { opacity: 1; }
    @media (hover: none) { .ess-a { opacity: 1; } }

    .ess-none {
        display: flex; flex-direction: column; align-items: center; gap: .25rem;
        padding: 2.1rem 1.2rem; text-align: center;
    }
    .ess-none i { font-size: 1.4rem; color: #dbe3ee; margin-bottom: .35rem; }
    .ess-none b { font-size: .84rem; font-weight: 750; color: #64748b; }
    .ess-none span { font-size: .72rem; font-weight: 600; color: #b6c2d2; line-height: 1.5; max-width: 340px; }

    /* ═══ Silme — geri alınamaz işlem ═══ */
    .esd .pfx-top { background: linear-gradient(180deg, #fffbfb, #fef6f6); border-bottom-color: #fdeaea; }
    .esd .pfx-top-t i { color: #f87171; }
    .esd-b p { margin: 0 0 .55rem; font-size: .72rem; font-weight: 600; color: #94a3b8; line-height: 1.55; }
    .esd-b p b { color: #64748b; font-weight: 750; }
    .esd-btn {
        display: inline-flex; align-items: center; gap: 7px;
        border: 1px solid #fecaca; background: #fff; color: #dc2626;
        border-radius: 9px; padding: 5px 13px; cursor: pointer;
        font: inherit; font-size: .74rem; font-weight: 750;
        transition: background .14s, border-color .14s, color .14s;
    }
    .esd-btn:hover { background: #fef2f2; border-color: #fca5a5; color: #b91c1c; }
    .esd-btn i { font-size: .68rem; }
</style>
@endonce

{{-- Ortak ledger stil + davranış (bir kez bağlanır) --}}
@include('components.quick-view.ledger-ui')
@include('agency.products._quick-view-styles')
@include('agency.products._quick-view-crud-script')

<script>
/**
 * Ekstra hizmet kartı — döküm hesabı ve silme.
 * Olaylar document seviyesinde: drawer her açılışta içeriği yeniden ürettiği
 * için tek bağlama yeterlidir (bkz. ledger-ui'deki aynı kalıp).
 */
(function () {
    if (document.__esqBound) return;
    document.__esqBound = true;

    var fmt = function (v) {
        return (Math.round(v * 100) / 100).toLocaleString('tr-TR', { minimumFractionDigits: 2, maximumFractionDigits: 2 });
    };
    var num = function (v) {
        var n = parseFloat(String(v == null ? '' : v).replace(',', '.'));
        return isNaN(n) ? 0 : n;
    };

    /** Ledger satırlarından ham değeri okur (kayıttan sonra dataset güncellenir). */
    function fieldValue(scope, field) {
        var r = scope.querySelector('.pfx-row[data-field="' + field + '"]');
        return r ? (r.dataset.value || '') : '';
    }

    /** Fiyat/vergi değişince dökümü, başlık ölçülerini ve kopyalanan metni tazeler. */
    function recalc(scope) {
        var card = scope.closest('.qv-card-wrapper') || document;
        var box = card.querySelector('[data-esq]');
        var receipt = card.querySelector('[data-esq-receipt]');
        if (!box || !receipt) return;

        var price = num(fieldValue(box, 'price'));
        var rateRaw = fieldValue(box, 'tax_rate');
        var rate = rateRaw === '' ? null : num(rateRaw);
        var incl = fieldValue(box, 'tax_included') === '1';
        var cur = fieldValue(box, 'currency') || box.dataset.esqCur || '';

        var net, tax, gross;
        if (rate === null) { net = price; tax = 0; gross = price; }
        else if (incl) { gross = price; net = Math.round(price / (1 + rate / 100) * 100) / 100; tax = Math.round((gross - net) * 100) / 100; }
        else { net = price; tax = Math.round(price * rate / 100 * 100) / 100; gross = Math.round((price + tax) * 100) / 100; }

        var set = function (key, text) {
            receipt.querySelectorAll('[data-esr="' + key + '"]').forEach(function (el) { el.textContent = text; });
        };
        set('net', fmt(net));
        set('tax', rate === null ? '—' : fmt(tax));
        set('gross', fmt(gross));
        set('cur', cur);

        // Vergi satırının etiketi: oran adı ledger satırının görünen metninden okunur
        var taxRow = box.querySelector('.pfx-row[data-field="tax_rate"] .pfx-v');
        var taxName = taxRow ? taxRow.textContent.trim() : '';
        set('taxLabel', rate === null ? 'Vergi' : (taxName || 'Vergi'));

        var ratePretty = rate === null ? '' : String(rate).replace('.', ',');
        set('formula', rate === null
            ? 'Vergi tanımlı değil; net ve satış tutarı aynıdır.'
            : (incl
                ? fmt(gross) + ' ÷ ' + fmt(1 + rate / 100) + ' = ' + fmt(net) + ' net  ·  fiyat vergi dahil girilmiş'
                : fmt(net) + ' × %' + ratePretty + ' = ' + fmt(tax) + ' vergi  ·  fiyat vergi hariç girilmiş'));

        var taxLine = receipt.querySelector('[data-esr-taxrow]');
        if (taxLine) {
            taxLine.classList.toggle('tax', tax > 0);
            taxLine.classList.toggle('zero', !(tax > 0));
        }

        // Vergi yoksa "fiyata vergi dahil" satırı anlamsızdır
        var inclSec = receipt.querySelector('[data-esq-inclsec]');
        if (inclSec) inclSec.style.display = rate === null ? 'none' : '';

        // Başlıktaki ölçüler
        var m = function (key, text) {
            var el = card.querySelector('[data-esq-metric="' + key + '"]');
            if (el) el.textContent = text;
        };
        m('price', fmt(price) + ' ' + cur);
        m('gross', fmt(gross) + ' ' + cur);
        m('grossLabel', rate === null ? 'VERGİSİZ' : 'VERGİ DAHİL');

        // Kopyala düğmesinin içeriği de güncel kalmalı
        var copyBtn = receipt.querySelector('[data-a="copy-block"]');
        if (copyBtn) {
            copyBtn.dataset.copyBlock = 'Net: ' + fmt(net) + ' ' + cur + '\n'
                + (rate === null ? 'Vergi: —' : (taxName || 'Vergi') + ': ' + fmt(tax) + ' ' + cur) + '\n'
                + 'Satış Tutarı: ' + fmt(gross) + ' ' + cur;
        }
    }

    // Ledger bir alanı kaydedince yayınlar; yalnızca dökümü etkileyenlerde hesapla.
    document.addEventListener('pfx:saved', function (e) {
        if (['price', 'currency', 'tax_rate', 'tax_included'].indexOf(e.detail.field) === -1) return;
        recalc(e.target);
    });
})();

// Quick-view'den silme: kayıt kaybolduğu için drawer kapatılır ve liste tazelenir
window.esqDelete = function (url, name) {
    const run = () => fetch(url, {
        method: 'DELETE',
        headers: {
            'X-CSRF-TOKEN': document.querySelector('meta[name="csrf-token"]').content,
            'Accept': 'application/json',
        },
    }).then(r => r.json()).then(d => {
        if (d.success) {
            if (typeof closeQuickView === 'function') closeQuickView();
            location.reload();
        } else if (typeof appToast === 'function') {
            appToast({ icon: 'error', title: 'Silinemedi', text: d.message || '' });
        }
    });

    if (typeof appConfirm === 'function') {
        appConfirm({
            title: 'Hizmet silinsin mi?', text: name, icon: 'warning',
            confirmButtonText: 'Evet, sil', cancelButtonText: 'Vazgeç',
        }).then(ok => ok && run());
    } else if (confirm(name + ' silinsin mi?')) {
        run();
    }
};
</script>
