<?php
session_start();
require '../config/database.php';

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

// PERBAIKAN: Samakan dengan session dashboard
if (!isset($_SESSION['user_logged_in']) || $_SESSION['role'] !== 'siswa' || !isset($_SESSION['id_siswa'])) {
    echo json_encode(['success' => false, 'message' => 'Sesi berakhir, silakan login kembali.']);
    exit;
}

$id_siswa = $_SESSION['id_siswa']; // Disamakan
$action = $_POST['action'] ?? '';

try {
    $stmt_user = $pdo->prepare("SELECT pin, saldo FROM siswa WHERE id_siswa = ?");
    $stmt_user->execute([$id_siswa]);
    $user_data = $stmt_user->fetch();

    // Fungsi Validasi PIN (Internal)
    function validatePin($input_pin, $db_pin) {
        if (empty($input_pin) || $input_pin !== $db_pin) {
            echo json_encode(['success' => false, 'message' => 'PIN Keamanan salah atau belum diatur!']);
            exit;
        }
    }

    switch ($action) {
        case 'simpan_setoran':
            $jumlah = $_POST['jumlah'];
            $keterangan = $_POST['keterangan'] ?: 'Setoran Tunai Siswa';
            $tanggal = $_POST['tanggal_transaksi'] ?: date('Y-m-d H:i:s');

            $stmt = $pdo->prepare("INSERT INTO transaksi (id_siswa, jenis_transaksi, jumlah, keterangan, tanggal_transaksi, status, input_by) VALUES (?, 'setoran', ?, ?, ?, 'pending', 'Siswa')");
            $stmt->execute([$id_siswa, $jumlah, $keterangan, $tanggal]);
            echo json_encode(['success' => true, 'message' => 'Setoran diajukan! Menunggu verifikasi petugas.']);
            break;

        case 'simpan_penarikan':
            validatePin($_POST['pin_verifikasi'], $user_data['pin']); // Sesuaikan nama input
            $jumlah = $_POST['jumlah'];
            if ($user_data['saldo'] < $jumlah) {
                echo json_encode(['success' => false, 'message' => 'Saldo Anda tidak mencukupi!']); exit;
            }
            $stmt = $pdo->prepare("INSERT INTO transaksi (id_siswa, jenis_transaksi, jumlah, keterangan, tanggal_transaksi, status, input_by) VALUES (?, 'penarikan', ?, 'Penarikan Mandiri', NOW(), 'pending', 'Siswa')");
            $stmt->execute([$id_siswa, $jumlah]);
            echo json_encode(['success' => true, 'message' => 'Pengajuan tarik tunai berhasil!']);
            break;

        case 'simpan_transfer':
            validatePin($_POST['pin_verifikasi'], $user_data['pin']);
            $id_penerima = $_POST['id_penerima'];
            $jumlah = $_POST['jumlah'];

            if ($id_siswa == $id_penerima) {
                echo json_encode(['success' => false, 'message' => 'Tidak bisa transfer ke diri sendiri.']); exit;
            }
            if ($user_data['saldo'] < $jumlah) {
                echo json_encode(['success' => false, 'message' => 'Saldo tidak cukup.']); exit;
            }

            $pdo->beginTransaction();
            $group_id = 'TRF' . time() . $id_siswa;
            // Debet Pengirim
            $pdo->prepare("INSERT INTO transaksi (id_siswa, jenis_transaksi, jumlah, keterangan, status, group_transfer, input_by) VALUES (?, 'transfer_keluar', ?, ?, 'valid', ?, 'Siswa')")
                ->execute([$id_siswa, $jumlah, "Transfer ke ID: $id_penerima", $group_id]);
            // Kredit Penerima
            $pdo->prepare("INSERT INTO transaksi (id_siswa, jenis_transaksi, jumlah, keterangan, status, group_transfer, input_by) VALUES (?, 'transfer_masuk', ?, ?, 'valid', ?, 'Siswa')")
                ->execute([$id_penerima, $jumlah, "Transfer dari ID: $id_siswa", $group_id]);
            // Update Saldo
            $pdo->prepare("UPDATE siswa SET saldo = saldo - ? WHERE id_siswa = ?")->execute([$jumlah, $id_siswa]);
            $pdo->prepare("UPDATE siswa SET saldo = saldo + ? WHERE id_siswa = ?")->execute([$jumlah, $id_penerima]);
            $pdo->commit();
            echo json_encode(['success' => true, 'message' => 'Transfer berhasil dikirim!']);
            break;

        case 'simpan_bayar':
            // PIN opsional atau wajib sesuai kebijakan Anda
            $id_pembayaran = $_POST['id_pembayaran'];
            $jumlah = $_POST['jumlah'];
            if ($user_data['saldo'] < $jumlah) {
                echo json_encode(['success' => false, 'message' => 'Saldo tidak cukup untuk bayar tagihan.']); exit;
            }
            $pdo->beginTransaction();
            $pdo->prepare("INSERT INTO transaksi_payment (id_siswa, id_pembayaran, jumlah, status, input_by) VALUES (?, ?, ?, 'valid', 'Siswa')")
                ->execute([$id_siswa, $id_pembayaran, $jumlah]);
            $pdo->prepare("UPDATE siswa SET saldo = saldo - ? WHERE id_siswa = ?")->execute([$jumlah, $id_siswa]);
            $pdo->prepare("UPDATE data_pembayaran SET saldo = saldo + ? WHERE id_pembayaran = ?")->execute([$jumlah, $id_pembayaran]);
            $pdo->commit();
            echo json_encode(['success' => true, 'message' => 'Pembayaran tagihan berhasil!']);
            break;

        default:
            echo json_encode(['success' => false, 'message' => 'Aksi ilegal.']);
    }
} catch (Exception $e) {
    if ($pdo->inTransaction()) $pdo->rollBack();
    echo json_encode(['success' => false, 'message' => 'Error: ' . $e->getMessage()]);
}