<?php
date_default_timezone_set('Asia/Jakarta');
session_start();

header('Content-Type: application/json');

if (!isset($_SESSION['user_logged_in']) || $_SESSION['user_type'] != 'siswa') {
    echo json_encode(['status' => 'error', 'message' => 'Akses ditolak.']);
    exit();
}

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

$id_siswa = $_SESSION['id_user'];
$jenis_transaksi = $_POST['jenis_transaksi'] ?? '';
$jumlah = $_POST['jumlah'] ?? 0;

if ($jenis_transaksi == 'setoran') {
    $tanggal = $_POST['tanggal'] ?? date('Y-m-d');
    $status = 'pending';
    try {
        $stmt = $pdo->prepare("INSERT INTO transaksi (id_siswa, jenis_transaksi, jumlah, status, tanggal_transaksi) VALUES (?, ?, ?, ?, ?)");
        $stmt->execute([$id_siswa, 'setoran', $jumlah, $status, $tanggal]);
        echo json_encode(['status' => 'success', 'message' => 'Permintaan setoran berhasil diajukan, menunggu validasi admin.']);
    } catch (PDOException $e) {
        echo json_encode(['status' => 'error', 'message' => 'Gagal mengajukan setoran: ' . $e->getMessage()]);
    }

} elseif ($jenis_transaksi == 'penarikan') {
    $status = 'pending';
    try {
        $stmt_saldo = $pdo->prepare("SELECT saldo FROM siswa WHERE id_siswa = ?");
        $stmt_saldo->execute([$id_siswa]);
        $saldo_sekarang = $stmt_saldo->fetchColumn();

        if ($saldo_sekarang >= $jumlah) {
            $stmt = $pdo->prepare("INSERT INTO transaksi (id_siswa, jenis_transaksi, jumlah, status, tanggal_transaksi) VALUES (?, ?, ?, ?, NOW())");
            $stmt->execute([$id_siswa, 'penarikan', $jumlah, $status]);
            echo json_encode(['status' => 'success', 'message' => 'Permintaan penarikan berhasil diajukan, menunggu validasi admin.']);
        } else {
            echo json_encode(['status' => 'error', 'message' => 'Saldo tidak mencukupi.']);
        }
    } catch (PDOException $e) {
        echo json_encode(['status' => 'error', 'message' => 'Gagal mengajukan penarikan: ' . $e->getMessage()]);
    }
} elseif ($jenis_transaksi == 'transfer') {
    $id_siswa_tujuan = $_POST['id_siswa_tujuan'] ?? '';
    
    if (!$id_siswa_tujuan) {
        echo json_encode(['status' => 'error', 'message' => 'Siswa tujuan tidak valid.']);
        exit();
    }

    try {
        // Cek saldo pengirim
        $stmt_saldo_pengirim = $pdo->prepare("SELECT saldo FROM siswa WHERE id_siswa = ?");
        $stmt_saldo_pengirim->execute([$id_siswa]);
        $saldo_pengirim = $stmt_saldo_pengirim->fetchColumn();

        if ($saldo_pengirim < $jumlah) {
            echo json_encode(['status' => 'error', 'message' => 'Saldo tidak mencukupi untuk transfer.']);
            exit();
        }

        // Ambil nama siswa pengirim dan penerima
        $stmt_nama_pengirim = $pdo->prepare("SELECT nama_siswa FROM siswa WHERE id_siswa = ?");
        $stmt_nama_pengirim->execute([$id_siswa]);
        $nama_pengirim = $stmt_nama_pengirim->fetchColumn();

        $stmt_nama_penerima = $pdo->prepare("SELECT nama_siswa FROM siswa WHERE id_siswa = ?");
        $stmt_nama_penerima->execute([$id_siswa_tujuan]);
        $nama_penerima = $stmt_nama_penerima->fetchColumn();
        
        $pdo->beginTransaction();

        $stmt_transfer_keluar = $pdo->prepare("UPDATE siswa SET saldo = saldo - ? WHERE id_siswa = ?");
        $stmt_transfer_keluar->execute([$jumlah, $id_siswa]);
        $stmt_transfer_masuk = $pdo->prepare("UPDATE siswa SET saldo = saldo + ? WHERE id_siswa = ?");
        $stmt_transfer_masuk->execute([$jumlah, $id_siswa_tujuan]);

        // Catat transaksi dengan keterangan
        $keterangan_keluar = "Transfer ke " . $nama_penerima;
        $keterangan_masuk = "Transfer dari " . $nama_pengirim;

        $stmt_log_keluar = $pdo->prepare("INSERT INTO transaksi (id_siswa, jenis_transaksi, jumlah, status, tanggal_transaksi, keterangan) VALUES (?, 'transfer_keluar', ?, 'valid', NOW(), ?)");
        $stmt_log_keluar->execute([$id_siswa, $jumlah, $keterangan_keluar]);
        $stmt_log_masuk = $pdo->prepare("INSERT INTO transaksi (id_siswa, jenis_transaksi, jumlah, status, tanggal_transaksi, keterangan) VALUES (?, 'transfer_masuk', ?, 'valid', NOW(), ?)");
        $stmt_log_masuk->execute([$id_siswa_tujuan, $jumlah, $keterangan_masuk]);

        $pdo->commit();
        echo json_encode(['status' => 'success', 'message' => 'Transfer berhasil!']);

    } catch (PDOException $e) {
        $pdo->rollBack();
        echo json_encode(['status' => 'error', 'message' => 'Gagal melakukan transfer: ' . $e->getMessage()]);
    }
} elseif ($jenis_transaksi == 'payment') {
    // Logika pembayaran siswa yang sudah diperbaiki
    $nama_pembayaran = $_POST['nama_pembayaran'] ?? 'Pembayaran';
    $id_penerima_payment = 2112; // ID tujuan pembayaran yang ditetapkan oleh admin
    $keterangan = 'Pembayaran ' . htmlspecialchars($nama_pembayaran);
    $status = 'pending';
    $input_by = 'siswa';

    try {
        $stmt_saldo = $pdo->prepare("SELECT saldo FROM siswa WHERE id_siswa = ?");
        $stmt_saldo->execute([$id_siswa]);
        $saldo_sekarang = $stmt_saldo->fetchColumn();

        if ($saldo_sekarang >= $jumlah) {
            $stmt = $pdo->prepare("INSERT INTO transaksi (id_siswa, jenis_transaksi, jumlah, status, keterangan, tanggal_transaksi, id_siswa_terkait, input_by) VALUES (?, 'pembayaran', ?, ?, ?, NOW(), ?, ?)");
            $stmt->execute([$id_siswa, $jumlah, $status, $keterangan, $id_penerima_payment, $input_by]);
            echo json_encode(['status' => 'success', 'message' => 'Permintaan pembayaran berhasil diajukan, menunggu validasi admin.']);
        } else {
            echo json_encode(['status' => 'error', 'message' => 'Saldo tidak mencukupi.']);
        }
    } catch (PDOException $e) {
        echo json_encode(['status' => 'error', 'message' => 'Gagal mengajukan pembayaran: ' . $e->getMessage()]);
    }

} else {
    echo json_encode(['status' => 'error', 'message' => 'Jenis transaksi tidak valid.']);
}
?>