{% extends "base.twig" %}

{% block title %}{{ title }}{% endblock %}

{% block styles %}
<style>
    :root {
        --primary: #667eea;
        --primary-dark: #5a67d8;
        --success: #10b981;
        --warning: #f59e0b;
        --danger: #ef4444;
        --info: #3b82f6;
        --purple: #8b5cf6;
        --gray-50: #f9fafb;
        --gray-100: #f3f4f6;
        --gray-200: #e5e7eb;
        --gray-500: #6b7280;
        --gray-600: #4b5563;
        --gray-700: #374151;
        --gray-800: #1f2937;
        --shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
        --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
        --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
    }

    .dana-container {
        width: 100%;
        padding: 24px;
        background: var(--gray-50);
        min-height: calc(100vh - 70px);
    }

    /* ── Page Header ── */
    .page-header {
        background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
        color: white;
        padding: 28px 32px;
        border-radius: 16px;
        display: flex;
        justify-content: space-between;
        align-items: center;
        box-shadow: var(--shadow-lg);
        margin-bottom: 24px;
        position: relative;
        overflow: hidden;
    }
    .page-header::before {
        content: '';
        position: absolute;
        top: -50%;
        right: -8%;
        width: 280px;
        height: 280px;
        background: rgba(255,255,255,0.08);
        border-radius: 50%;
        pointer-events: none;
    }
    .header-content h1 {
        font-size: 26px;
        font-weight: 700;
        margin-bottom: 4px;
    }
    .header-content p {
        opacity: .85;
        font-size: 14px;
        margin-bottom: 0;
    }
    .header-badge {
        background: rgba(255,255,255,.2);
        border-radius: 50px;
        padding: 8px 18px;
        font-size: 13px;
        font-weight: 600;
        backdrop-filter: blur(4px);
    }

    /* ── Stat Cards ── */
    .stats-grid {
        display: grid;
        grid-template-columns: repeat(3, 1fr);
        gap: 18px;
        margin-bottom: 24px;
    }
    .stat-card {
        background: white;
        border-radius: 14px;
        padding: 22px 20px;
        box-shadow: var(--shadow);
        display: flex;
        align-items: center;
        gap: 16px;
        border-left: 5px solid var(--primary);
        transition: transform .15s ease, box-shadow .15s ease;
        cursor: default;
    }
    .stat-card:hover { transform: translateY(-2px); box-shadow: var(--shadow-md); }
    .stat-card.success { border-left-color: var(--success); }
    .stat-card.warning { border-left-color: var(--warning); }
    .stat-card.info    { border-left-color: var(--info); }
    .stat-card.purple  { border-left-color: var(--purple); }
    .stat-icon-wrap {
        width: 52px; height: 52px;
        border-radius: 12px;
        display: flex; align-items: center; justify-content: center;
        font-size: 22px;
        flex-shrink: 0;
    }
    .stat-card.success .stat-icon-wrap { background: #d1fae5; }
    .stat-card.warning .stat-icon-wrap { background: #fef3c7; }
    .stat-card.info    .stat-icon-wrap { background: #dbeafe; }
    .stat-card.purple  .stat-icon-wrap { background: #ede9fe; }
    .stat-body { flex: 1; }
    .stat-value { font-size: 20px; font-weight: 700; color: var(--gray-800); line-height: 1.2; }
    .stat-label { font-size: 12px; color: var(--gray-500); text-transform: uppercase; letter-spacing: .4px; margin-top: 4px; }

    /* ── Main Grid ── */
    .main-grid {
        display: grid;
        grid-template-columns: 420px 1fr;
        gap: 20px;
        align-items: start;
    }

    /* ── Cards ── */
    .card-panel {
        background: white;
        border-radius: 14px;
        box-shadow: var(--shadow);
        overflow: hidden;
    }
    .card-panel-header {
        padding: 18px 22px 14px;
        border-bottom: 1px solid var(--gray-100);
        display: flex;
        align-items: center;
        justify-content: space-between;
    }
    .card-panel-title {
        font-size: 15px;
        font-weight: 700;
        color: var(--gray-800);
        display: flex;
        align-items: center;
        gap: 8px;
    }
    .card-panel-body {
        padding: 20px 22px;
    }

    /* ── Donut chart wrapper ── */
    .chart-wrap {
        position: relative;
        width: 100%;
        max-width: 340px;
        margin: 0 auto 10px;
    }
    .chart-center-label {
        position: absolute;
        top: 50%; left: 50%;
        transform: translate(-50%, -50%);
        text-align: center;
        pointer-events: none;
    }
    .chart-center-label .cl-value {
        font-size: 18px;
        font-weight: 700;
        color: var(--gray-800);
        display: block;
    }
    .chart-center-label .cl-label {
        font-size: 11px;
        color: var(--gray-500);
        text-transform: uppercase;
        letter-spacing: .4px;
    }
    .chart-hint {
        text-align: center;
        font-size: 12px;
        color: var(--gray-500);
        margin-top: 8px;
    }
    .chart-hint i { margin-right: 4px; }

    /* ── Category list (right panel) ── */
    .category-list { list-style: none; padding: 0; margin: 0; }
    .category-item {
        display: flex;
        align-items: center;
        gap: 12px;
        padding: 12px 22px;
        border-bottom: 1px solid var(--gray-100);
        cursor: pointer;
        transition: background .12s ease;
    }
    .category-item:last-child { border-bottom: none; }
    .category-item:hover { background: var(--gray-50); }
    .category-item:hover .cat-name { color: var(--primary); }
    .cat-dot {
        width: 13px; height: 13px;
        border-radius: 50%;
        flex-shrink: 0;
    }
    .cat-info { flex: 1; min-width: 0; }
    .cat-name {
        font-size: 14px;
        font-weight: 600;
        color: var(--gray-800);
        white-space: nowrap;
        overflow: hidden;
        text-overflow: ellipsis;
        transition: color .12s;
    }
    .cat-meta { font-size: 12px; color: var(--gray-500); margin-top: 2px; }
    .cat-bar-wrap {
        width: 110px;
        background: var(--gray-100);
        border-radius: 4px;
        height: 6px;
        overflow: hidden;
        flex-shrink: 0;
    }
    .cat-bar { height: 100%; border-radius: 4px; }
    .cat-amount {
        font-size: 14px;
        font-weight: 700;
        color: var(--gray-800);
        text-align: right;
        min-width: 90px;
        flex-shrink: 0;
    }
    .cat-badge {
        font-size: 11px;
        background: var(--gray-100);
        color: var(--gray-600);
        border-radius: 20px;
        padding: 2px 9px;
        flex-shrink: 0;
    }
    .view-detail-btn {
        font-size: 11px;
        color: var(--primary);
        flex-shrink: 0;
        display: flex;
        align-items: center;
        gap: 3px;
    }

    /* ── Modal detail table ── */
    #modalUsageTable th {
        background: linear-gradient(135deg, var(--primary) 0%, var(--primary-dark) 100%);
        color: white;
        font-size: 11px;
        text-transform: uppercase;
        letter-spacing: .4px;
        padding: 12px 14px;
        border: none;
        font-weight: 600;
    }
    #modalUsageTable td {
        padding: 11px 14px;
        font-size: 13px;
        vertical-align: middle;
        border-color: var(--gray-100);
    }
    #modalUsageTable tbody tr:hover { background: var(--gray-50); }
    .modal-cat-badge {
        display: inline-block;
        width: 10px; height: 10px;
        border-radius: 50%;
        margin-right: 6px;
    }
    .receipt-link {
        font-size: 12px;
        color: var(--primary);
        text-decoration: none;
        display: inline-flex;
        align-items: center;
        gap: 4px;
    }
    .receipt-link:hover { text-decoration: underline; }
    .no-receipt { font-size: 12px; color: var(--gray-500); }

    .modal-header-colored {
        background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
        color: white;
        border: none;
        border-radius: 12px 12px 0 0;
    }
    .modal-header-colored .btn-close { filter: invert(1) brightness(2); }
    .modal-total-bar {
        background: var(--gray-50);
        border-radius: 10px;
        padding: 12px 16px;
        margin-bottom: 16px;
        display: flex;
        align-items: center;
        justify-content: space-between;
        font-size: 13px;
    }
    .modal-total-bar .total-label { color: var(--gray-600); font-weight: 500; }
    .modal-total-bar .total-value { font-weight: 700; color: var(--gray-800); font-size: 16px; }

    /* ── Empty state ── */
    .empty-state {
        text-align: center;
        padding: 48px 24px;
        color: var(--gray-500);
    }
    .empty-state i { font-size: 48px; opacity: .4; display: block; margin-bottom: 12px; }

    /* ── Responsive ── */
    @media (max-width: 1100px) {
        .main-grid { grid-template-columns: 1fr; }
        .stats-grid { grid-template-columns: repeat(2, 1fr); }
    }
    @media (max-width: 600px) {
        .stats-grid { grid-template-columns: 1fr; }
        .cat-bar-wrap { display: none; }
    }
    .stat-card.danger { border-left-color: var(--danger); }
    .stat-card.danger .stat-icon-wrap { background: #fee2e2; }
</style>
{% endblock %}

{% block contents %}
<div class="dana-container">

    {# ── Page Header ── #}
    <div class="page-header">
        <div class="header-content">
            <h1><i class="bi bi-pie-chart-fill me-2"></i>Infografik Dana</h1>
            <p>Visualisasi penggunaan dana peserta mengikut kategori perbelanjaan</p>
        </div>
        <div class="header-badge">
            <i class="bi bi-calendar3 me-1"></i>
            Semua Rekod
        </div>
    </div>

    {# ── Summary Stat Cards ── #}
    <div class="stats-grid">

        {# 1 — Jumlah Digunakan #}
        <div class="stat-card success">
            <div class="stat-icon-wrap">💰</div>
            <div class="stat-body">
                <div class="stat-value">RM {{ (summary.total_amount ?? 0)|number_format(2, '.', ',') }}</div>
                <div class="stat-label">Jumlah Digunakan</div>
            </div>
        </div>

        {# 2 — Kategori #}
        <div class="stat-card warning">
            <div class="stat-icon-wrap">🗂️</div>
            <div class="stat-body">
                <div class="stat-value">{{ summary.total_categories ?? 0 }}</div>
                <div class="stat-label">Kategori Perbelanjaan</div>
            </div>
        </div>

        {# 3 — Jumlah Rekod #}
        <div class="stat-card info">
            <div class="stat-icon-wrap">📋</div>
            <div class="stat-body">
                <div class="stat-value">{{ summary.total_records ?? 0 }}</div>
                <div class="stat-label">Jumlah Rekod</div>
            </div>
        </div>

        {# 4 — Peserta Terlibat #}
        <div class="stat-card purple" style="flex-direction:column; align-items:flex-start; gap:10px;">
            <div style="display:flex; align-items:center; gap:14px; width:100%;">
                <div class="stat-icon-wrap">👥</div>
                <div class="stat-body">
                    <div class="stat-value">{{ summary.total_participants ?? 0 }}</div>
                    <div class="stat-label">Peserta Terlibat</div>
                </div>
            </div>
            {% if noUsage|length > 0 %}
            <div style="width:100%; border-top:1px solid #ede9fe; padding-top:8px;">
                <button type="button" onclick="openNoUsageModal()"
                        style="background:none;border:none;padding:0;cursor:pointer;display:flex;align-items:center;gap:6px;font-size:12px;font-weight:600;color:#7c3aed;">
                    <i class="bi bi-exclamation-circle-fill"></i>
                    {{ noUsage|length }} peserta belum keyin
                    <i class="bi bi-box-arrow-up-right" style="font-size:11px;"></i>
                </button>
            </div>
            {% else %}
            <div style="width:100%; border-top:1px solid #ede9fe; padding-top:8px; font-size:12px; color:#10b981; font-weight:600;">
                <i class="bi bi-check-circle-fill me-1"></i> Semua peserta telah keyin
            </div>
            {% endif %}
        </div>

        {# 5 — Purata Belanja / Peserta #}
        <div class="stat-card info">
            <div class="stat-icon-wrap">📐</div>
            <div class="stat-body">
                <div class="stat-value">RM {{ (summary.avg_per_participant ?? 0)|number_format(2, '.', ',') }}</div>
                <div class="stat-label">Purata Belanja / Peserta</div>
            </div>
        </div>

        {# 6 — Rekod Tanpa Resit #}
        <div class="stat-card danger" style="flex-direction:column; align-items:flex-start; gap:10px;">
            <div style="display:flex; align-items:center; gap:14px; width:100%;">
                <div class="stat-icon-wrap">🧾</div>
                <div class="stat-body">
                    <div class="stat-value">{{ summary.no_receipt_count ?? 0 }}</div>
                    <div class="stat-label">Rekod Tanpa Resit</div>
                </div>
            </div>
            {% if (summary.no_receipt_count ?? 0) > 0 %}
            <div style="width:100%; border-top:1px solid #fee2e2; padding-top:8px;">
                <button type="button" onclick="openNoReceiptModal()"
                        style="background:none;border:none;padding:0;cursor:pointer;display:flex;align-items:center;gap:6px;font-size:12px;font-weight:600;color:#dc2626;">
                    <i class="bi bi-exclamation-triangle-fill"></i>
                    Lihat senarai rekod
                    <i class="bi bi-box-arrow-up-right" style="font-size:11px;"></i>
                </button>
            </div>
            {% else %}
            <div style="width:100%; border-top:1px solid #fee2e2; padding-top:8px; font-size:12px; color:#10b981; font-weight:600;">
                <i class="bi bi-check-circle-fill me-1"></i> Semua rekod ada resit
            </div>
            {% endif %}
        </div>

    </div>

    {# ── Main Grid: Donut Chart + Category List ── #}
    {% if categories|length > 0 %}
    <div class="main-grid">

        {# Left — Donut Chart #}
        <div class="card-panel">
            <div class="card-panel-header">
                <div class="card-panel-title">
                    <i class="bi bi-pie-chart" style="color:var(--primary)"></i>
                    Carta Donut — Agihan Kategori
                </div>
            </div>
            <div class="card-panel-body">
                <div class="chart-wrap">
                    <canvas id="danaDonutChart"></canvas>
                    <div class="chart-center-label">
                        <span class="cl-value" id="centerValue">RM {{ (summary.total_amount ?? 0)|number_format(0, '.', ',') }}</span>
                        <span class="cl-label" id="centerLabel">Jumlah</span>
                    </div>
                </div>
                <p class="chart-hint">
                    <i class="bi bi-hand-index"></i>Klik pada carta atau baris di sebelah untuk lihat senarai
                </p>
            </div>
        </div>

        {# Right — Category Breakdown List #}
        <div class="card-panel">
            <div class="card-panel-header">
                <div class="card-panel-title">
                    <i class="bi bi-list-ul" style="color:var(--primary)"></i>
                    Senarai Kategori
                </div>
                <small class="text-muted">Klik baris untuk lihat detail</small>
            </div>
            <ul class="category-list" id="categoryList">
                {% set totalAmt = summary.total_amount ?? 1 %}
                {% for cat in categories %}
                {% set pct = totalAmt > 0 ? (cat.total_amount / totalAmt * 100)|round(1) : 0 %}
                <li class="category-item"
                    data-category="{{ cat.used_for|e('html_attr') }}"
                    data-amount="{{ cat.total_amount }}"
                    data-count="{{ cat.record_count }}"
                    data-index="{{ loop.index0 }}">
                    <span class="cat-dot" data-index="{{ loop.index0 }}"></span>
                    <div class="cat-info">
                        <div class="cat-name">{{ cat.used_for }}</div>
                        <div class="cat-meta">{{ cat.record_count }} rekod &bull; {{ pct }}%</div>
                    </div>
                    <div class="cat-bar-wrap">
                        <div class="cat-bar" data-index="{{ loop.index0 }}" style="width:{{ pct }}%"></div>
                    </div>
                    <div class="cat-amount">RM {{ cat.total_amount|number_format(2, '.', ',') }}</div>
                    <span class="view-detail-btn"><i class="bi bi-eye-fill"></i></span>
                </li>
                {% endfor %}
            </ul>
        </div>

    </div>
    {% else %}
    <div class="card-panel">
        <div class="empty-state">
            <i class="bi bi-inbox"></i>
            <p class="fw-semibold">Tiada rekod penggunaan dana ditemui.</p>
            <small>Data akan muncul apabila peserta menambah rekod perbelanjaan.</small>
        </div>
    </div>
    {% endif %}

</div>

{# ── Detail Modal ── #}
<div class="modal fade" id="detailModal" tabindex="-1" aria-labelledby="detailModalLabel" aria-hidden="true">
    <div class="modal-dialog modal-xl modal-dialog-scrollable">
        <div class="modal-content" style="border-radius:14px; overflow:hidden; border:none; box-shadow: 0 20px 60px rgba(0,0,0,0.15);">
            <div class="modal-header modal-header-colored">
                <div>
                    <h5 class="modal-title fw-bold mb-1" id="detailModalLabel">
                        <span class="modal-cat-badge" id="modalCatDot"></span>
                        Senarai Penggunaan Dana
                    </h5>
                    <div style="font-size:13px; opacity:.85;" id="modalSubtitle">–</div>
                </div>
                <button type="button" class="btn-close" data-bs-dismiss="modal"></button>
            </div>
            <div class="modal-body" style="padding:20px 24px;">
                <div class="modal-total-bar">
                    <span class="total-label"><i class="bi bi-calculator me-1"></i>Jumlah Keseluruhan Kategori Ini</span>
                    <span class="total-value" id="modalTotal">–</span>
                </div>
                <div class="table-responsive">
                    <table class="table table-hover mb-0" id="modalUsageTable">
                        <thead>
                            <tr>
                                <th>#</th>
                                <th>Nama Peserta</th>
                                <th>No. IC</th>
                                <th>Kategori Penggunaan</th>
                                <th>Jumlah (RM)</th>
                                <th>Resit</th>
                            </tr>
                        </thead>
                        <tbody id="modalTableBody">
                        </tbody>
                    </table>
                </div>
                <div id="modalEmpty" class="empty-state d-none">
                    <i class="bi bi-inbox"></i>
                    <p>Tiada rekod untuk kategori ini.</p>
                </div>
            </div>
            <div class="modal-footer" style="border-top:1px solid var(--gray-100);">
                <button type="button" class="btn btn-light" data-bs-dismiss="modal">Tutup</button>
            </div>
        </div>
    </div>
</div>
{# ── No-Usage Modal ── #}
<div class="modal fade" id="noUsageModal" tabindex="-1" aria-labelledby="noUsageModalLabel" aria-hidden="true">
    <div class="modal-dialog modal-lg modal-dialog-scrollable">
        <div class="modal-content" style="border-radius:14px; overflow:hidden; border:none; box-shadow: 0 20px 60px rgba(0,0,0,0.15);">
            <div class="modal-header modal-header-colored">
                <div>
                    <h5 class="modal-title fw-bold mb-1" id="noUsageModalLabel">
                        <i class="bi bi-exclamation-circle-fill me-2"></i>Peserta Belum Keyin Dana
                    </h5>
                    <div style="font-size:13px; opacity:.85;">
                        {{ noUsage|length }} peserta aktif tiada rekod penggunaan dana
                    </div>
                </div>
                <button type="button" class="btn-close" data-bs-dismiss="modal"></button>
            </div>
            <div class="modal-body" style="padding:20px 24px;">
                {% if noUsage|length > 0 %}
                <div class="table-responsive">
                    <table class="table table-hover mb-0">
                        <thead>
                            <tr>
                                <th style="background:linear-gradient(135deg,#667eea 0%,#5a67d8 100%);color:white;font-size:11px;text-transform:uppercase;letter-spacing:.4px;padding:12px 14px;border:none;font-weight:600;">#</th>
                                <th style="background:linear-gradient(135deg,#667eea 0%,#5a67d8 100%);color:white;font-size:11px;text-transform:uppercase;letter-spacing:.4px;padding:12px 14px;border:none;font-weight:600;">Nama Peserta</th>
                                <th style="background:linear-gradient(135deg,#667eea 0%,#5a67d8 100%);color:white;font-size:11px;text-transform:uppercase;letter-spacing:.4px;padding:12px 14px;border:none;font-weight:600;">No. IC</th>
                                <th style="background:linear-gradient(135deg,#667eea 0%,#5a67d8 100%);color:white;font-size:11px;text-transform:uppercase;letter-spacing:.4px;padding:12px 14px;border:none;font-weight:600;">Nama Coach</th>
                                <th style="background:linear-gradient(135deg,#667eea 0%,#5a67d8 100%);color:white;font-size:11px;text-transform:uppercase;letter-spacing:.4px;padding:12px 14px;border:none;font-weight:600;">Status</th>
                            </tr>
                        </thead>
                        <tbody>
                            {% for p in noUsage %}
                            <tr>
                                <td style="padding:11px 14px;font-size:13px;border-color:#f3f4f6;">{{ loop.index }}</td>
                                <td style="padding:11px 14px;font-size:13px;border-color:#f3f4f6;font-weight:600;">{{ p.name }}</td>
                                <td style="padding:11px 14px;font-size:13px;border-color:#f3f4f6;color:#6b7280;">{{ p.nric ?? '–' }}</td>
                                <td style="padding:11px 14px;font-size:13px;border-color:#f3f4f6;">
                                    <span style="display:inline-flex;align-items:center;gap:5px;">
                                        <i class="bi bi-person-badge" style="color:var(--primary);"></i>
                                        {{ p.coach_name ?? '–' }}
                                    </span>
                                </td>
                                <td style="padding:11px 14px;font-size:13px;border-color:#f3f4f6;">
                                    <span style="display:inline-flex;align-items:center;gap:5px;background:#fef3c7;color:#92400e;border-radius:20px;padding:3px 10px;font-size:11px;font-weight:600;">
                                        <i class="bi bi-clock"></i> Belum Keyin
                                    </span>
                                </td>
                            </tr>
                            {% endfor %}
                        </tbody>
                    </table>
                </div>
                {% else %}
                <div class="empty-state">
                    <i class="bi bi-check-circle"></i>
                    <p class="fw-semibold">Semua peserta telah keyin penggunaan dana.</p>
                </div>
                {% endif %}
            </div>
            <div class="modal-footer" style="border-top:1px solid #f3f4f6;">
                <button type="button" class="btn btn-light" data-bs-dismiss="modal">Tutup</button>
            </div>
        </div>
    </div>
</div>

{# ── No-Receipt Modal ── #}
<div class="modal fade" id="noReceiptModal" tabindex="-1" aria-labelledby="noReceiptModalLabel" aria-hidden="true">
    <div class="modal-dialog modal-xl modal-dialog-scrollable">
        <div class="modal-content" style="border-radius:14px; overflow:hidden; border:none; box-shadow: 0 20px 60px rgba(0,0,0,0.15);">
            <div class="modal-header" style="background:linear-gradient(135deg,#ef4444 0%,#dc2626 100%);color:white;border:none;border-radius:12px 12px 0 0;">
                <div>
                    <h5 class="modal-title fw-bold mb-1" id="noReceiptModalLabel">
                        <i class="bi bi-exclamation-triangle-fill me-2"></i>Rekod Tanpa Resit
                    </h5>
                    <div style="font-size:13px; opacity:.85;">
                        {{ summary.no_receipt_count ?? 0 }} rekod penggunaan dana belum dimuat naik resit
                    </div>
                </div>
                <button type="button" class="btn-close" data-bs-dismiss="modal" style="filter:invert(1) brightness(2);"></button>
            </div>
            <div class="modal-body" style="padding:20px 24px;">
                {% if noReceipt|length > 0 %}
                <div class="table-responsive">
                    <table class="table table-hover mb-0">
                        <thead>
                            <tr>
                                {% set th = "background:linear-gradient(135deg,#ef4444 0%,#dc2626 100%);color:white;font-size:11px;text-transform:uppercase;letter-spacing:.4px;padding:12px 14px;border:none;font-weight:600;" %}
                                <th style="{{ th }}">#</th>
                                <th style="{{ th }}">Nama Peserta</th>
                                <th style="{{ th }}">No. IC</th>
                                <th style="{{ th }}">Nama Coach</th>
                                <th style="{{ th }}">Kategori Penggunaan</th>
                                <th style="{{ th }}">Jumlah (RM)</th>
                            </tr>
                        </thead>
                        <tbody>
                            {% for r in noReceipt %}
                            <tr>
                                <td style="padding:11px 14px;font-size:13px;border-color:#f3f4f6;">{{ loop.index }}</td>
                                <td style="padding:11px 14px;font-size:13px;border-color:#f3f4f6;font-weight:600;">{{ r.participant_name }}</td>
                                <td style="padding:11px 14px;font-size:13px;border-color:#f3f4f6;color:#6b7280;">{{ r.participant_nric ?? '–' }}</td>
                                <td style="padding:11px 14px;font-size:13px;border-color:#f3f4f6;">
                                    <span style="display:inline-flex;align-items:center;gap:5px;">
                                        <i class="bi bi-person-badge" style="color:#ef4444;"></i>
                                        {{ r.coach_name ?? '–' }}
                                    </span>
                                </td>
                                <td style="padding:11px 14px;font-size:13px;border-color:#f3f4f6;">{{ r.used_for }}</td>
                                <td style="padding:11px 14px;font-size:13px;border-color:#f3f4f6;font-weight:700;color:#1f2937;">
                                    RM {{ r.amount|number_format(2, '.', ',') }}
                                </td>
                            </tr>
                            {% endfor %}
                        </tbody>
                    </table>
                </div>
                {% else %}
                <div class="empty-state">
                    <i class="bi bi-check-circle"></i>
                    <p class="fw-semibold">Semua rekod mempunyai resit.</p>
                </div>
                {% endif %}
            </div>
            <div class="modal-footer" style="border-top:1px solid #f3f4f6;">
                <button type="button" class="btn btn-light" data-bs-dismiss="modal">Tutup</button>
            </div>
        </div>
    </div>
</div>
{% endblock %}

{% block scripts %}
<script src="https://cdn.jsdelivr.net/npm/chart.js@4.4.2/dist/chart.umd.min.js"></script>
<script>
(function () {
    // ── Colour palette (extend as needed) ──
    const PALETTE = [
        '#667eea','#10b981','#f59e0b','#ef4444','#8b5cf6',
        '#3b82f6','#ec4899','#14b8a6','#f97316','#6366f1',
        '#84cc16','#06b6d4','#a855f7','#e11d48','#0ea5e9',
        '#22c55e','#eab308','#db2777','#7c3aed','#059669'
    ];

    // ── Data injected from PHP ──
    const CATEGORIES = {{ categories|json_encode|raw }};
    const ALL_USAGE  = {{ allUsageJson|raw }};
    const TOTAL_AMT  = {{ (summary.total_amount ?? 0) }};

    // Assign colour to each category by index
    const colorMap = {};
    CATEGORIES.forEach((c, i) => {
        colorMap[c.used_for] = PALETTE[i % PALETTE.length];
    });

    // ── Apply colours to dot + bars in category list ──
    document.querySelectorAll('.cat-dot').forEach(el => {
        const idx = parseInt(el.dataset.index);
        el.style.background = PALETTE[idx % PALETTE.length];
    });
    document.querySelectorAll('.cat-bar').forEach(el => {
        const idx = parseInt(el.dataset.index);
        el.style.background = PALETTE[idx % PALETTE.length];
    });

    // ── Build Donut Chart ──
    const ctx = document.getElementById('danaDonutChart');
    if (!ctx) return;

    const labels  = CATEGORIES.map(c => c.used_for);
    const amounts = CATEGORIES.map(c => parseFloat(c.total_amount));
    const colors  = CATEGORIES.map((c, i) => PALETTE[i % PALETTE.length]);

    const chart = new Chart(ctx, {
        type: 'doughnut',
        data: {
            labels: labels,
            datasets: [{
                data: amounts,
                backgroundColor: colors,
                borderColor: '#ffffff',
                borderWidth: 3,
                hoverOffset: 10,
            }]
        },
        options: {
            cutout: '65%',
            responsive: true,
            animation: { animateRotate: true, duration: 700 },
            plugins: {
                legend: { display: false },
                tooltip: {
                    callbacks: {
                        label: function(ctx) {
                            const val = ctx.parsed;
                            const pct = TOTAL_AMT > 0 ? ((val / TOTAL_AMT) * 100).toFixed(1) : 0;
                            return ` RM ${val.toLocaleString('ms-MY', {minimumFractionDigits:2})}  (${pct}%)`;
                        }
                    }
                }
            },
            onClick: function(evt, elements) {
                if (elements.length > 0) {
                    const idx = elements[0].index;
                    openModal(idx);
                }
            },
            onHover: function(evt, elements) {
                ctx.canvas.style.cursor = elements.length ? 'pointer' : 'default';
                if (elements.length > 0) {
                    const idx  = elements[0].index;
                    const cat  = CATEGORIES[idx];
                    const pct  = TOTAL_AMT > 0 ? ((parseFloat(cat.total_amount) / TOTAL_AMT) * 100).toFixed(1) : 0;
                    document.getElementById('centerValue').textContent =
                        'RM ' + parseFloat(cat.total_amount).toLocaleString('ms-MY', {minimumFractionDigits:2});
                    document.getElementById('centerLabel').textContent = pct + '%';
                } else {
                    document.getElementById('centerValue').textContent =
                        'RM ' + TOTAL_AMT.toLocaleString('ms-MY', {minimumFractionDigits:0});
                    document.getElementById('centerLabel').textContent = 'Jumlah';
                }
            }
        }
    });

    // ── Category list click ──
    document.querySelectorAll('.category-item').forEach(item => {
        item.addEventListener('click', function () {
            const idx = parseInt(this.dataset.index);
            openModal(idx);
        });
    });

    // ── Open modal for a category index ──
    function openModal(idx) {
        const cat     = CATEGORIES[idx];
        const colour  = PALETTE[idx % PALETTE.length];
        const records = ALL_USAGE.filter(r => r.used_for === cat.used_for);

        // Header
        document.getElementById('detailModalLabel').innerHTML =
            `<span class="modal-cat-badge" style="background:${colour};display:inline-block;width:12px;height:12px;border-radius:50%;margin-right:8px;"></span>` +
            escHtml(cat.used_for);
        document.getElementById('modalSubtitle').textContent =
            `${records.length} rekod · ${cat.record_count} rekod · Jumlah: RM ${parseFloat(cat.total_amount).toLocaleString('ms-MY',{minimumFractionDigits:2})}`;
        document.getElementById('modalTotal').textContent =
            'RM ' + parseFloat(cat.total_amount).toLocaleString('ms-MY', {minimumFractionDigits:2});

        // Table body
        const tbody = document.getElementById('modalTableBody');
        const empty = document.getElementById('modalEmpty');
        const table = document.getElementById('modalUsageTable');

        tbody.innerHTML = '';

        if (records.length === 0) {
            table.style.display = 'none';
            empty.classList.remove('d-none');
        } else {
            table.style.display = '';
            empty.classList.add('d-none');

            records.forEach((r, i) => {
                const receiptHtml = r.receipt_path
                    ? `<a href="/${r.receipt_path}" target="_blank" class="receipt-link"><i class="bi bi-file-earmark-image"></i>Lihat</a>`
                    : `<span class="no-receipt">–</span>`;

                const tr = document.createElement('tr');
                tr.innerHTML = `
                    <td>${i + 1}</td>
                    <td><strong>${escHtml(r.participant_name ?? '–')}</strong></td>
                    <td style="font-size:12px;color:var(--gray-500)">${escHtml(r.participant_nric ?? '–')}</td>
                    <td>
                        <span style="display:inline-block;width:9px;height:9px;border-radius:50%;background:${colour};margin-right:6px;"></span>
                        ${escHtml(r.used_for)}
                    </td>
                    <td style="font-weight:700;color:var(--gray-800)">
                        RM ${parseFloat(r.amount).toLocaleString('ms-MY',{minimumFractionDigits:2})}
                    </td>
                    <td>${receiptHtml}</td>
                `;
                tbody.appendChild(tr);
            });
        }

        // Show modal
        const modal = new bootstrap.Modal(document.getElementById('detailModal'));
        modal.show();
    }

    // ── Open "Belum Keyin" modal ──
    window.openNoUsageModal = function () {
        new bootstrap.Modal(document.getElementById('noUsageModal')).show();
    };

    // ── Open "Tanpa Resit" modal ──
    window.openNoReceiptModal = function () {
        new bootstrap.Modal(document.getElementById('noReceiptModal')).show();
    };

    // ── Escape HTML ──
    function escHtml(str) {
        if (!str) return '';
        return str.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;').replace(/"/g,'&quot;');
    }

})();
</script>
{% endblock %}
