<?php
// Aktifkan laporan error untuk debugging
error_reporting(E_ALL);
ini_set('display_errors', 1);

session_start();

// Validasi session
if (!isset($_SESSION['user_logged_in']) || $_SESSION['user_type'] != 'siswa') {
    http_response_code(403);
    echo "Akses ditolak.";
    exit();
}

// Sertakan koneksi
include '../config/koneksi.php';

// Pastikan koneksi ke database berhasil
if (!isset($pdo) || $pdo === null) {
    http_response_code(500);
    echo 'Gagal terhubung ke database.';
    exit();
}

$id_siswa = $_SESSION['id_user'];
$filter = $_GET['filter'] ?? 'all';
$query_where = 'WHERE id_siswa = ? ';

// --- LOGIKA PERHITUNGAN SALDO ---
// 1. Ambil Saldo Akhir Siswa (hanya dari transaksi yang valid)
$stmt_saldo = $pdo->prepare(
    "SELECT 
        SUM(CASE WHEN jenis_transaksi IN ('setoran', 'transfer_masuk') THEN jumlah ELSE 0 END) -
        SUM(CASE WHEN jenis_transaksi IN ('penarikan', 'transfer_keluar', 'pembayaran') THEN jumlah ELSE 0 END)
    AS saldo_akhir 
    FROM transaksi WHERE id_siswa = ? AND status = 'valid'"
);
$stmt_saldo->execute([$id_siswa]);
$result_saldo = $stmt_saldo->fetch();
$saldo_akhir = $result_saldo['saldo_akhir'] ?? 0;

// Filter data transaksi berdasarkan periode
switch ($filter) {
    case 'today':
        $query_where .= "AND DATE(tanggal_transaksi) = CURDATE()";
        break;
    case 'week':
        $query_where .= "AND tanggal_transaksi >= DATE_SUB(CURDATE(), INTERVAL 7 DAY)";
        break;
    case 'month':
        $query_where .= "AND tanggal_transaksi >= DATE_SUB(CURDATE(), INTERVAL 1 MONTH)";
        break;
    case 'all':
    default:
        // Tidak perlu tambahan where clause untuk tanggal
        break;
}

try {
    // Ambil daftar transaksi, diurutkan dari yang terbaru
    $stmt_transaksi = $pdo->prepare("SELECT * FROM transaksi " . $query_where . " ORDER BY tanggal_transaksi DESC, id_transaksi DESC");
    $stmt_transaksi->execute([$id_siswa]);
    $transaksi_list = $stmt_transaksi->fetchAll();

    $html_content = '';

    if (count($transaksi_list) > 0) {
        // Menambahkan div dengan gaya overflow-x untuk scroll horizontal
        $html_content .= '<div class="table-responsive">';
        // Menambahkan class 'table-sm' untuk padding yang lebih kecil
        // Menambahkan style inline untuk font-family dan font-size
        $html_content .= '<table class="table table-striped table-bordered table-hover table-sm" style="font-family: Arial Narrow, sans-serif; font-size: 12px;">';
        $html_content .= '<thead class="table-dark">';
        $html_content .= '<tr>';
        $html_content .= '<th>Tanggal</th>';
        $html_content .= '<th>Jenis</th>';
        $html_content .= '<th>Debet</th>';
        $html_content .= '<th>Kredit</th>';
        $html_content .= '<th>Saldo</th>';
        $html_content .= '<th>Status</th>';
        $html_content .= '<th>Ket.</th>';
        $html_content .= '</tr>';
        $html_content .= '</thead>';
        $html_content .= '<tbody>';

        // Inisialisasi saldo berjalan dengan saldo akhir total
        $saldo_berjalan = $saldo_akhir;

        foreach ($transaksi_list as $t) {
            $debet = 0;
            $kredit = 0;

            if ($t['status'] == 'valid') {
                if (in_array($t['jenis_transaksi'], ['setoran', 'transfer_masuk'])) {
                    $kredit = $t['jumlah'];
                } else if (in_array($t['jenis_transaksi'], ['penarikan', 'transfer_keluar', 'pembayaran'])) {
                    $debet = $t['jumlah'];
                }
            }
            
            // Perbaikan logika perhitungan saldo berjalan
            // Saldo saat ini harus dihitung sebelum penyesuaian saldo_berjalan
            $saldo_saat_ini = ($t['status'] == 'valid') ? $saldo_berjalan : 'N/A'; // Menandai 'N/A' untuk transaksi tidak valid

            $badge_color = 'secondary';
            if ($t['status'] == 'valid') $badge_color = 'primary';
            if ($t['status'] == 'pending') $badge_color = 'warning';

            $jenis_color = 'secondary';
            if ($kredit > 0) $jenis_color = 'success';
            if ($debet > 0) $jenis_color = 'danger';

            $html_content .= '<tr>';
            // Menambahkan style inline pada sel tabel
            $html_content .= '<td style="font-size: 12px;">' . date('d-m-y H:i', strtotime($t['tanggal_transaksi'])) . '</td>';
            $html_content .= '<td style="font-size: 12px;"><span class="badge bg-' . $jenis_color . '">' . str_replace('_', ' ', ucfirst($t['jenis_transaksi'])) . '</span></td>';
            $html_content .= '<td>' . ($debet > 0 ? 'Rp' . number_format($debet, 0, ',', '.') : '-') . '</td>';
            $html_content .= '<td>' . ($kredit > 0 ? 'Rp' . number_format($kredit, 0, ',', '.') : '-') . '</td>';
            $html_content .= '<td>' . ($saldo_saat_ini !== 'N/A' ? 'Rp' . number_format($saldo_saat_ini, 0, ',', '.') : '-') . '</td>';
            $html_content .= '<td><span class="badge bg-' . $badge_color . '">' . ucfirst($t['status']) . '</span></td>';
            $html_content .= '<td style="font-size: 12px;">' . htmlspecialchars($t['keterangan'] ?: '-') . '</td>';
            $html_content .= '</tr>';

            // Memperbarui saldo berjalan untuk transaksi berikutnya
            if ($t['status'] == 'valid') {
                $saldo_berjalan = $saldo_berjalan + $debet - $kredit;
            }
        }
        $html_content .= '</tbody>';
        $html_content .= '</table>';
        $html_content .= '</div>';

        $html_content .= '<div class="mt-3 text-end">';
        $html_content .= '<a href="cetak_pdf.php?filter=' . htmlspecialchars($filter) . '" target="_blank" class="btn btn-danger">';
        $html_content .= '<i class="bi bi-file-earmark-pdf-fill"></i> Cetak PDF';
        $html_content .= '</a>';
        $html_content .= '</div>';

    } else {
        $html_content .= '<div class="alert alert-info mt-3">Tidak ada riwayat transaksi yang cocok dengan filter ini.</div>';
    }

    echo $html_content;

} catch (PDOException $e) {
    http_response_code(500);
    echo 'Terjadi kesalahan: ' . $e->getMessage();
}
?>