@extends('layouts.app')

@section('page_title', 'Die Kaffeeliste - Buchungen')

@php
    $overview = $ledgerOverview ?? [];
    $journal = $ledger ?? ($overview['entries'] ?? []);
    $summary = $overview['summary'] ?? [];
    $entryCount = count($journal);
    $paymentCount = (int) ($summary['payments'] ?? count(array_filter($journal, static fn (array $row): bool => ($row['entry_type'] ?? '') === 'payment')));
    $strikeCount = (int) ($summary['strike_entries'] ?? count(array_filter($journal, static fn (array $row): bool => ($row['entry_type'] ?? '') === 'consumption')));
    $correctionCount = (int) ($summary['corrections'] ?? count(array_filter($journal, static fn (array $row): bool => in_array((string) ($row['entry_type'] ?? ''), ['adjustment', 'reversal'], true))));
    $balance = (float) ($summary['balance'] ?? array_sum(array_map(static fn (array $row): float => (float) ($row['amount'] ?? 0), $journal)));
    $latestEntry = $journal[0]['booked_at'] ?? null;
    $policy = $overview['correction_policy'] ?? [];
    $policyPoints = [
        $policy['payments'] ?? 'Einzahlungen werden per Storno korrigiert und nur durch den Verantwortlichen freigegeben.',
        $policy['coffee_entries'] ?? 'Stricheintraege bleiben loeschbar, wenn der Verantwortliche das veranlasst.',
        $policy['audit'] ?? 'Jede Korrektur bleibt im Audit sichtbar und braucht einen Ursprungseintrag.',
    ];
    $entryTypes = [
        'payment' => ['label' => 'Einzahlung', 'tone' => 'success'],
        'consumption' => ['label' => 'Strich', 'tone' => 'warning'],
        'adjustment' => ['label' => 'Korrektur', 'tone' => 'neutral'],
        'reversal' => ['label' => 'Storno', 'tone' => 'warning'],
    ];
@endphp

@section('content')
    <section class="hero hero--split">
        <div class="hero__content">
            <div>
                <p class="hero__kicker">Buchungen</p>
                <h2 class="hero__title">Buchungen</h2>
                <p class="hero__lead">
                    Das Ledger bildet die fachliche Buchungsspur der Kaffeeliste ab. Einzahlungen sind als Storno
                    sichtbar, Striche bleiben als verantwortbare Loeschung erkennbar und Korrekturen bleiben auditierbar.
                </p>
            </div>
            <div class="hero__actions">
                <span class="badge badge--solid">Audit trail</span>
                <span class="badge">Storno nur durch Verantwortliche</span>
                <span class="badge">Striche loeschbar</span>
            </div>
            <div class="hero__meta">
                <span class="pill">{{ $entryCount }} Buchungen</span>
                <span class="pill">{{ number_format($balance, 2, ',', '.') }} EUR Saldo</span>
                <span class="pill">Letzte Buchung: {{ $latestEntry ?? '-' }}</span>
            </div>
        </div>

        <aside class="hero__aside">
            <article class="card metric">
                <p class="metric__label">Einzahlungen</p>
                <div class="metric__value">{{ $paymentCount }}</div>
                <p class="muted">Einzahlungen koennen durch Verantwortliche storniert werden.</p>
            </article>
            <article class="card metric">
                <p class="metric__label">Striche</p>
                <div class="metric__value">{{ $strikeCount }}</div>
                <p class="muted">Stricheintraege bleiben als loeschbare Fachaktion sichtbar.</p>
            </article>
        </aside>
    </section>

    <section class="grid grid--3">
        <article class="card metric">
            <p class="metric__label">Offener Saldo</p>
            <div class="metric__value">{{ number_format($balance, 2, ',', '.') }} EUR</div>
            <p class="muted">Die Buchungsspur bleibt sofort nachvollziehbar.</p>
        </article>
        <article class="card metric">
            <p class="metric__label">Korrekturen</p>
            <div class="metric__value">{{ $correctionCount }}</div>
            <p class="muted">Stornos und manuelle Anpassungen sind im Audit sichtbar.</p>
        </article>
        <article class="card metric">
            <p class="metric__label">Buchungstypen</p>
            <div class="metric__value">4 Pfade</div>
            <p class="muted">Einzahlung, Verbrauch, Anpassung und Reversal bleiben getrennt erkennbar.</p>
        </article>
    </section>

    <section class="grid grid--2" style="margin-top: 18px;">
        <article class="table-card">
            <div class="table-card__header">
                <div>
                    <p class="card__eyebrow">Buchungen</p>
                    <h3>Ledger-Eintraege</h3>
                </div>
                <span class="pill">Tenant scoped</span>
            </div>
            <div class="table-card__body">
                <table>
                    <thead>
                        <tr>
                            <th>Datum</th>
                            <th>Mitglied</th>
                            <th>Typ</th>
                            <th>Referenz</th>
                            <th>Betrag</th>
                            <th>Aktion</th>
                        </tr>
                    </thead>
                    <tbody>
                        @forelse ($journal as $entry)
                            @php
                                $entryType = (string) ($entry['entry_type'] ?? '');
                                $typeMeta = $entryTypes[$entryType] ?? ['label' => ucfirst($entryType ?: 'Unbekannt'), 'tone' => 'neutral'];
                            @endphp
                            <tr>
                                <td>{{ $entry['booked_at'] ?? '-' }}</td>
                                <td>{{ $entry['member_name'] ?? '-' }}</td>
                                <td><span class="status">{{ $typeMeta['label'] }}</span></td>
                                <td>{{ $entry['reference_type'] ?? '-' }}</td>
                                <td>{{ number_format((float) ($entry['amount'] ?? 0), 2, ',', '.') }} EUR</td>
                                <td>
                                    @if ($entryType === 'payment')
                                        <span class="status status--warning">stornierbar</span>
                                    @elseif ($entryType === 'consumption')
                                        <span class="status status--warning">loeschbar</span>
                                    @elseif (in_array($entryType, ['adjustment', 'reversal'], true))
                                        <span class="status">auditpflichtig</span>
                                    @else
                                        <span class="status">gebucht</span>
                                    @endif
                                </td>
                            </tr>
                        @empty
                            <tr>
                                <td colspan="6"><span class="muted">Noch keine Ledger-Eintraege vorhanden.</span></td>
                            </tr>
                        @endforelse
                    </tbody>
                </table>
            </div>
        </article>

        <article class="panel">
            <p class="card__eyebrow">Korrekturregeln</p>
            <h3>Was im MVP sichtbar sein muss</h3>
            <div class="timeline" style="margin-top: 18px;">
                <div class="timeline__item">
                    <p class="timeline__title">Einzahlungen</p>
                    <p class="timeline__meta">Storno ist fachlich vorgesehen und nur durch Verantwortliche ausloesbar.</p>
                </div>
                <div class="timeline__item">
                    <p class="timeline__title">Stricheintraege</p>
                    <p class="timeline__meta">Striche bleiben loeschbar, wenn der Verantwortliche das explizit veranlasst.</p>
                </div>
                <div class="timeline__item">
                    <p class="timeline__title">Audit</p>
                    <p class="timeline__meta">Jede Korrektur bleibt mit Ursprungseintrag und Zeitstempel nachvollziehbar.</p>
                </div>
                <div class="timeline__item">
                    <p class="timeline__title">Reconciliation</p>
                    <p class="timeline__meta">Zahlungsabgleich wird vorbereitet, aber noch nicht als automatischer MVP-Import ausgerollt.</p>
                </div>
            </div>
            <div class="note" style="margin-top: 18px;">
                Das Ledger bleibt damit fachlich vollständig genug fuer das MVP, ohne die spaetere Zahlungsabstimmung vorwegzunehmen.
            </div>
            <ul class="list" style="margin-top: 12px;">
                @foreach ($policyPoints as $policyPoint)
                    <li>{{ $policyPoint }}</li>
                @endforeach
            </ul>
        </article>
    </section>

    <section class="grid grid--3" style="margin-top: 18px;">
        @foreach ($entryTypes as $key => $type)
            <article class="card">
                <p class="card__eyebrow">{{ $type['label'] }}</p>
                <h3>{{ ucfirst($key) }}</h3>
                <p class="muted">
                    @if ($key === 'payment')
                        Verantwortliche koennen diese Buchung stornieren.
                    @elseif ($key === 'consumption')
                        Diese Stricheintraege koennen durch Verantwortliche geloescht werden.
                    @elseif ($key === 'adjustment')
                        Manuelle Anpassungen bleiben auditierbar.
                    @else
                        Ruecknahmen bleiben als eigener Buchungstyp sichtbar.
                    @endif
                </p>
            </article>
        @endforeach
    </section>
@endsection
