<?php
// process_transfer.php

// --- PENGATURAN ERROR (PENTING UNTUK DEBUGGING) ---
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

// Pastikan PHP menulis error ke file log.
// PASTIKAN PATH INI BENAR DAN BISA DITULIS OLEH SERVER ANDA!
ini_set('log_errors', 1);
ini_set('error_log', '/home/sakeramy/public_html/php-error.log');
// ----------------------------------------------------------------------------------

error_log("DEBUG TRANSFER: [START] Script process_transfer.php execution started.");

// 1. Mulai sesi PHP
// Sangat penting untuk memanggil session_start() di awal setiap script yang menggunakan sesi.
if (session_status() == PHP_SESSION_NONE) {
    session_start();
    error_log("DEBUG TRANSFER: [1] Session started successfully (was not active).");
} else {
    error_log("DEBUG TRANSFER: [1] Session was already active.");
}

// Tambahkan debug informasi sesi global untuk inspeksi mendalam
error_log("DEBUG TRANSFER: [1.1] Current Session ID: " . session_id());
error_log("DEBUG TRANSFER: [1.2] Content of \$_SESSION array: " . print_r($_SESSION, true));


// 2. Panggil file-file helper yang dibutuhkan
// Pastikan semua file ini berada di direktori yang SAMA PERSIS dengan process_transfer.php
// atau sesuaikan path-nya jika berada di direktori berbeda.

// Memastikan file ada dan bisa dibaca sebelum di-include
$dbPath = 'db.php';
$sessionHelperPath = 'session_helper.php';
$transferHandlerPath = 'transfer_handler.php';

// Validasi dan include db.php
if (!file_exists($dbPath) || !is_readable($dbPath)) {
    error_log("ERROR TRANSFER: [2.0] db.php not found or not readable at: " . realpath('.') . '/' . $dbPath);
    header('Content-Type: application/json');
    echo json_encode(['success' => false, 'message' => 'Kesalahan server: File database tidak ditemukan atau tidak dapat diakses.']);
    exit();
}
require_once $dbPath;
error_log("DEBUG TRANSFER: [2.1] db.php included.");


// Validasi dan include session_helper.php
if (!file_exists($sessionHelperPath) || !is_readable($sessionHelperPath)) {
    error_log("ERROR TRANSFER: [3.0] session_helper.php NOT FOUND or NOT READABLE at: " . realpath('.') . '/' . $sessionHelperPath);
    header('Content-Type: application/json');
    echo json_encode(['success' => false, 'message' => 'Kesalahan server: File helper sesi tidak ditemukan atau tidak dapat diakses.']);
    exit();
}
require_once $sessionHelperPath; // Garis ini akan tetap dieksekusi
error_log("DEBUG TRANSFER: [3.1] session_helper.php included.");


// Validasi dan include transfer_handler.php
if (!file_exists($transferHandlerPath) || !is_readable($transferHandlerPath)) {
    error_log("ERROR TRANSFER: [4.0] transfer_handler.php not found or not readable at: " . realpath('.') . '/' . $transferHandlerPath);
    header('Content-Type: application/json');
    echo json_encode(['success' => false, 'message' => 'Kesalahan server: File handler transfer tidak ditemukan atau tidak dapat diakses.']);
    exit();
}
require_once $transferHandlerPath;
error_log("DEBUG TRANSFER: [4.1] transfer_handler.php included.");


// Set header untuk respons JSON
header('Content-Type: application/json');

$response = ['success' => false, 'message' => ''];
error_log("DEBUG TRANSFER: [5] Initial JSON response array created.");

// 3. Pastikan koneksi database berhasil sebelum melanjutkan
if (!isset($conn) || $conn->connect_error) {
    $errorMessage = 'Terjadi kesalahan koneksi database.';
    if (isset($conn) && $conn->connect_error) {
        $errorMessage .= ' Detail: ' . $conn->connect_error;
    } else {
        $errorMessage .= ' Detail: Variabel $conn tidak terdefinisi (pastikan db.php mendefinisikan $conn).';
    }
    error_log("ERROR TRANSFER: [6] " . $errorMessage);
    $response['message'] = 'Terjadi kesalahan internal. Mohon coba lagi nanti.';
    echo json_encode($response);
    exit();
}
error_log("DEBUG TRANSFER: [7] Database connection successful.");

// 4. Ambil data user yang sedang login (METODE SESUAI topup_process.php)
// Ini mengandalkan fungsi get_current_user_data() dari session_helper.php
if (!function_exists('get_current_user_data')) {
    error_log("FATAL ERROR TRANSFER: [8.0] Function 'get_current_user_data' is NOT DEFINED after including session_helper.php.");
    $response['message'] = 'Terjadi kesalahan sistem internal: Fungsi pengambilan data pengguna tidak ditemukan.';
    echo json_encode($response);
    exit();
}

$currentUserData = get_current_user_data();
error_log("DEBUG TRANSFER: [9] Result of get_current_user_data(): " . print_r($currentUserData, true));

// 5. Validasi data user yang diambil (terutama peran/role dan keberadaan user)
// Ini adalah validasi login dan peran, serupa dengan topup_process.php
if (!is_array($currentUserData) || empty($currentUserData) || !isset($currentUserData['role']) || $currentUserData['role'] !== 'orangtua') {
    $debug_message = "DEBUG TRANSFER: [10] Access denied or user not valid. ";
    if (!is_array($currentUserData) || empty($currentUserData)) {
        $debug_message .= "\$currentUserData is invalid or empty.";
    } elseif (!isset($currentUserData['role'])) {
        $debug_message .= "Key 'role' not found in \$currentUserData.";
    } else {
        $debug_message .= "User role is '" . ($currentUserData['role'] ?? 'UNDEFINED_ROLE') . "', expected 'orangtua'.";
    }
    error_log($debug_message);

    $response['message'] = 'Anda harus login sebagai orangtua untuk melakukan transfer.';
    echo json_encode($response);
    exit();
}
error_log("DEBUG TRANSFER: [11] User is logged in and role is 'orangtua'.");

$pengirimUserId = $currentUserData['id'];
// Pastikan ID pengirim valid dan numerik
if (!isset($pengirimUserId) || !is_numeric($pengirimUserId) || $pengirimUserId <= 0) {
    error_log("ERROR TRANSFER: [12] Invalid sender User ID obtained from session: " . ($pengirimUserId ?? 'NULL'));
    $response['message'] = 'ID Pengguna pengirim tidak valid. Mohon coba lagi.';
    echo json_encode($response);
    exit();
}
error_log("DEBUG TRANSFER: [13] Sender User ID: " . $pengirimUserId);


// 6. Proses request POST
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    // Ambil dan bersihkan/validasi input
    $siswaId = isset($_POST['siswa_id']) ? (int)$_POST['siswa_id'] : 0;
    $jumlahTransfer = isset($_POST['jumlah_transfer']) ? (float)$_POST['jumlah_transfer'] : 0;
    $tujuanTransfer = isset($_POST['tujuan_transfer']) ? trim($_POST['tujuan_transfer']) : '';
    // Gunakan htmlspecialchars untuk mencegah XSS jika pesan akan ditampilkan kembali di HTML
    $pesan = isset($_POST['pesan']) ? htmlspecialchars(trim($_POST['pesan']), ENT_QUOTES, 'UTF-8') : null;

    error_log("DEBUG TRANSFER: [14] POST data received. Siswa ID: " . $siswaId . ", Jumlah: " . $jumlahTransfer . ", Tujuan: " . $tujuanTransfer . ", Pesan: " . ($pesan ?? 'NULL'));

    // Validasi dasar input dari form
    if ($siswaId <= 0) {
        $response['message'] = 'Pilih siswa tujuan yang valid.';
        echo json_encode($response);
        exit();
    }
    if ($jumlahTransfer <= 0) {
        $response['message'] = 'Jumlah transfer harus lebih besar dari nol.';
        echo json_encode($response);
        exit();
    }
    if (empty($tujuanTransfer)) {
         $response['message'] = 'Tujuan transfer tidak boleh kosong.';
         echo json_encode($response);
         exit();
    }


    // Panggil fungsi modalTransfer dari transfer_handler.php
    // Asumsi modalTransfer($amount, $senderId, $receiverId, $purpose, $message, $dbConnection)
    // Penting: Pastikan modalTransfer menerima $conn jika ia memerlukannya untuk operasi DB
    $transferResult = modalTransfer(
        $jumlahTransfer,
        $pengirimUserId,
        $siswaId,
        $tujuanTransfer,
        $pesan,
        $conn // Lewatkan koneksi database jika modalTransfer membutuhkannya
    );
    error_log("DEBUG TRANSFER: [15] modalTransfer function called. Result status: " . ($transferResult['status'] ?? 'N/A') . ", Message: " . ($transferResult['message'] ?? 'N/A'));

    if ($transferResult['status'] === 'success') {
        $response['success'] = true;
        $response['message'] = $transferResult['message'];
    } else {
        $response['success'] = false;
        // Gunakan pesan error dari modalTransfer jika ada, fallback ke pesan umum
        $response['message'] = $transferResult['message'] ?? 'Transfer gagal. Terjadi kesalahan internal yang tidak diketahui.';
    }

} else {
    error_log("DEBUG TRANSFER: [16] Request method is not POST. Only POST requests are allowed.");
    $response['message'] = 'Metode request tidak diizinkan.';
}

echo json_encode($response);
error_log("DEBUG TRANSFER: [17] JSON response sent. Final status: " . ($response['success'] ? 'SUCCESS' : 'FAILURE') . ", Message: " . $response['message']);

// Pastikan koneksi database ditutup jika dibuka di db.php dan tidak ditutup di modalTransfer
if (isset($conn) && $conn instanceof mysqli && !$conn->connect_error) {
    $conn->close();
    error_log("DEBUG TRANSFER: [18] Database connection closed.");
}
error_log("DEBUG TRANSFER: [END] Script process_transfer.php execution finished.");
?>