<?php
require_once __DIR__ . '/includes/functions.php';
requireLogin();
$pageTitle = 'Laporan Siswa per Kategori';

$kategoriId = $_GET['kategori_id'] ?? '';
$dari = $_GET['dari'] ?? '';
$sampai = $_GET['sampai'] ?? '';

$kategoriList = $pdo->query("SELECT * FROM kategori WHERE tipe='pemasukan' ORDER BY kelompok, nama")->fetchAll();
$kategoriTerpilih = null;
$data = [];

if ($kategoriId) {
    foreach ($kategoriList as $k) {
        if ($k['id'] == $kategoriId) { $kategoriTerpilih = $k; break; }
    }

    $sql = "
        SELECT tr.*, s.nis, s.nama as nama_siswa, k.nama as kelas_nama, t.nama as tingkat_nama, a.nama_akun
        FROM transaksi tr
        JOIN siswa s ON s.id = tr.siswa_id
        LEFT JOIN kelas k ON k.id = s.kelas_id
        LEFT JOIN tingkat t ON t.id = k.tingkat_id
        LEFT JOIN akun_kas a ON a.id = tr.akun_id
        WHERE tr.kategori_id = :kategori_id AND tr.siswa_id IS NOT NULL
    ";
    $params = ['kategori_id' => $kategoriId];
    if ($dari)   { $sql .= " AND tr.tanggal >= :dari";   $params['dari'] = $dari; }
    if ($sampai) { $sql .= " AND tr.tanggal <= :sampai"; $params['sampai'] = $sampai; }
    $sql .= " ORDER BY s.nama, tr.tanggal";

    $stmt = $pdo->prepare($sql);
    $stmt->execute($params);
    $data = $stmt->fetchAll();
}

// Ringkasan
$totalNominal = array_sum(array_column($data, 'jumlah'));
$jumlahSiswaUnik = count(array_unique(array_column($data, 'siswa_id')));
$jumlahTransaksi = count($data);

// Kelompokkan per siswa untuk ringkasan ringkas
$rekapPerSiswa = [];
foreach ($data as $row) {
    $sid = $row['siswa_id'];
    if (!isset($rekapPerSiswa[$sid])) {
        $rekapPerSiswa[$sid] = [
            'nis' => $row['nis'], 'nama' => $row['nama_siswa'],
            'kelas' => formatKelasLabel($row['tingkat_nama'] ?? '', $row['kelas_nama'] ?? ''),
            'jumlah_bayar' => 0, 'total' => 0, 'terakhir' => $row['tanggal'],
        ];
    }
    $rekapPerSiswa[$sid]['jumlah_bayar']++;
    $rekapPerSiswa[$sid]['total'] += $row['jumlah'];
    if ($row['tanggal'] > $rekapPerSiswa[$sid]['terakhir']) $rekapPerSiswa[$sid]['terakhir'] = $row['tanggal'];
}

include __DIR__ . '/includes/header.php';
include __DIR__ . '/includes/sidebar.php';
?>

<div class="d-flex justify-content-between align-items-center mb-3 no-print">
    <h5 class="mb-0">Laporan Siswa per Kategori</h5>
    <?php if ($kategoriTerpilih): ?>
        <button class="btn btn-outline-secondary" onclick="window.print()"><i class="bi bi-printer"></i> Cetak</button>
    <?php endif; ?>
</div>

<div class="card mb-3 no-print">
    <div class="card-body">
        <form method="GET" class="row g-2">
            <div class="col-md-5">
                <select name="kategori_id" class="form-select" required>
                    <option value="">-- Pilih Kategori Pemasukan --</option>
                    <?php foreach ($kategoriList as $k): ?>
                        <option value="<?= $k['id'] ?>" <?= $kategoriId==$k['id']?'selected':'' ?>>
                            <?= htmlspecialchars($k['nama']) ?> <?= $k['kelompok']==='spp' ? '(SPP)' : '(Umum)' ?>
                        </option>
                    <?php endforeach; ?>
                </select>
            </div>
            <div class="col-md-3"><input type="date" name="dari" value="<?= htmlspecialchars($dari) ?>" class="form-control" placeholder="Dari tanggal"></div>
            <div class="col-md-3"><input type="date" name="sampai" value="<?= htmlspecialchars($sampai) ?>" class="form-control" placeholder="Sampai tanggal"></div>
            <div class="col-md-1"><button class="btn btn-primary w-100"><i class="bi bi-funnel"></i></button></div>
        </form>
        <p class="text-muted small mt-2 mb-0">Catatan: laporan ini hanya menampilkan transaksi yang tertaut ke data siswa (misalnya pembayaran SPP). Pemasukan umum yang tidak terkait siswa tertentu tidak akan muncul di sini.</p>
    </div>
</div>

<?php if ($kategoriTerpilih): ?>
    <?= renderKopSurat(getPengaturan($pdo)) ?>
    <h6 class="d-none d-print-block text-center mb-3">LAPORAN SISWA - KATEGORI: <?= strtoupper(htmlspecialchars($kategoriTerpilih['nama'])) ?></h6>

    <div class="row g-3 mb-3">
        <div class="col-md-4 col-6">
            <div class="card stat-card p-3"><div class="text-muted small">Kategori</div><div class="fw-bold"><?= htmlspecialchars($kategoriTerpilih['nama']) ?></div></div>
        </div>
        <div class="col-md-4 col-6">
            <div class="card stat-card p-3"><div class="text-muted small">Jumlah Siswa Membayar</div><div class="fw-bold fs-5"><?= $jumlahSiswaUnik ?></div></div>
        </div>
        <div class="col-md-4 col-6">
            <div class="card stat-card p-3"><div class="text-muted small">Total Terkumpul</div><div class="fw-bold fs-5 text-success"><?= rupiah($totalNominal) ?></div></div>
        </div>
    </div>

    <div class="card mb-3">
        <div class="card-header">Ringkasan per Siswa</div>
        <div class="card-body p-0">
            <table class="table table-hover w-100">
                <thead><tr><th>NIS</th><th>Nama</th><th>Kelas</th><th class="text-end">Jml Pembayaran</th><th class="text-end">Total Dibayar</th><th>Terakhir Bayar</th></tr></thead>
                <tbody>
                <?php foreach ($rekapPerSiswa as $r): ?>
                    <tr>
                        <td><?= htmlspecialchars($r['nis']) ?></td>
                        <td><?= htmlspecialchars($r['nama']) ?></td>
                        <td><?= htmlspecialchars($r['kelas']) ?></td>
                        <td class="text-end"><?= $r['jumlah_bayar'] ?>x</td>
                        <td class="text-end fw-semibold text-success"><?= rupiah($r['total']) ?></td>
                        <td><?= tanggalIndo($r['terakhir']) ?></td>
                    </tr>
                <?php endforeach; ?>
                <?php if (empty($rekapPerSiswa)): ?>
                    <tr><td colspan="6" class="text-center text-muted py-4">Belum ada siswa yang membayar kategori ini<?= ($dari || $sampai) ? ' pada periode yang dipilih' : '' ?>.</td></tr>
                <?php endif; ?>
                </tbody>
            </table>
        </div>
    </div>

    <div class="card">
        <div class="card-header no-print">Detail Transaksi (<?= $jumlahTransaksi ?> transaksi)</div>
        <div class="card-body p-0">
            <table class="table table-hover w-100">
                <thead><tr><th>Tanggal</th><th>NIS</th><th>Nama Siswa</th><th>Kelas</th><th class="text-end">Jumlah</th><th>Akun</th><th>No. Transaksi</th><th>Keterangan</th></tr></thead>
                <tbody>
                <?php foreach ($data as $row): ?>
                    <tr>
                        <td><?= tanggalIndo($row['tanggal']) ?></td>
                        <td><?= htmlspecialchars($row['nis']) ?></td>
                        <td><?= htmlspecialchars($row['nama_siswa']) ?></td>
                        <td><?= htmlspecialchars(formatKelasLabel($row['tingkat_nama'] ?? '', $row['kelas_nama'] ?? '')) ?></td>
                        <td class="text-end text-success fw-semibold"><?= rupiah($row['jumlah']) ?></td>
                        <td><?= htmlspecialchars($row['nama_akun']) ?></td>
                        <td><?= htmlspecialchars($row['no_transaksi']) ?></td>
                        <td><?= htmlspecialchars($row['keterangan']) ?></td>
                    </tr>
                <?php endforeach; ?>
                </tbody>
            </table>
        </div>
    </div>

    <?= renderTandaTanganLaporan(getPengaturan($pdo), $sampai ?: null) ?>
<?php else: ?>
    <div class="card">
        <div class="card-body text-center text-muted py-5">
            <i class="bi bi-funnel fs-2"></i>
            <p class="mt-2 mb-0">Pilih kategori di atas untuk melihat daftar siswa yang sudah membayar.</p>
        </div>
    </div>
<?php endif; ?>

<?php include __DIR__ . '/includes/footer.php'; ?>