<?php
error_reporting(E_ALL);
ini_set("display_errors", 1);
session_start();
header('Content-Type: application/json');

include '../db/koneksi.php';

try {
    if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
        throw new Exception('Metode request tidak valid.');
    }

    $extplayer = $_SESSION['extplayer'] ?? '';
    $username  = $_SESSION['username'] ?? '';

    if (empty($extplayer) || empty($username)) {
        throw new Exception('Sesi pengguna tidak valid. Silakan login kembali.');
    }

    // 1. Cek apakah ada deposit yang masih berstatus Pending
    $qpending = mysqli_query($koneksi, "SELECT * FROM tb_deposit WHERE extplayer='" . mysqli_real_escape_string($koneksi, $extplayer) . "' AND status='Pending'");
    if (mysqli_num_rows($qpending) > 0) {
        throw new Exception('Anda memiliki deposit pending. Silakan selesaikan atau batalkan deposit tersebut sebelum membuat yang baru.');
    }

    // 2. Ambil data nominal deposit dari POST form user
    $jumlah = $_POST['amount'] ?? '0';
    $cleanAmount = preg_replace('/[^0-9]/', '', $jumlah);
    $amount = (int)$cleanAmount;
    $promo_id = (int)($_POST['promo_id'] ?? 0);

    // Batasi minimal deposit dasar web (Contoh: Rp 10.000)
    if ($amount < 10000) {
        throw new Exception('Minimal deposit adalah Rp 10.000.');
    }

    // 3. Ambil data gambar dan nama layanan QRIS dari database (tb_qris ID 1)
    $query_qris = mysqli_query($koneksi, "SELECT * FROM tb_qris WHERE id = 1");
    $data_qris  = mysqli_fetch_assoc($query_qris);

    // Validasi status QRIS apakah sedang aktif atau maintenance
    if (!$data_qris || (int)$data_qris['status'] !== 1) {
        throw new Exception('Metode pembayaran QRIS saat ini sedang maintenance. Mohon gunakan metode lain.');
    }

    $nama_gambar = $data_qris['image_qr'];
    $nama_layanan = $data_qris['nama_layanan'] ?? 'QRIS';
    
    // Tentukan jalur URL gambar QRIS untuk di-render di halaman user
    $qr_url = "/asset/images/qris/" . $nama_gambar;

    // 4. Siapkan data untuk struktur tabel deposit admin
    $ref = 'DEP' . strtoupper(substr(md5(uniqid()), 0, 8)); 
    $bank_asal = 'QRIS SCAN';
    $bank_tujuan = $nama_layanan . ' (Automated QR)';
    $status = 'Pending'; 
    $bukti_transfer_path = ''; 

    // ==========================================================
    // LOGIKA HITUNG BONUS BERDASARKAN VALUE PROMO ID DARI FORM
    // ==========================================================
    $bonus = 0;
    
    // Jika user memilih promo dengan value="2" (BONUS NEW MEMBER 50+50)
    if ($promo_id === 2) {
        // Validasi syarat deposit berdasarkan atribut data-min-deposit="50000.00"
        if ($amount < 50000) {
            throw new Exception('Untuk klaim promo BONUS NEW MEMBER 50+50, minimal deposit adalah Rp 50.000.');
        }
        
        // Bonus otomatis diset Rp 50.000 berdasarkan max-bonus promo tersebut
        $bonus = 50000; 
    }
    // ==========================================================

    $expired_at = date('Y-m-d H:i:s', strtotime('+15 minutes'));

    // 5. INPUT DATA KE TABEL DEPOSIT ADMIN
    $stmt = $koneksi->prepare("
        INSERT INTO tb_deposit 
        (extplayer, username, ref, jumlah, bonus, bukti, bank_asal, bank_tujuan, status, created_at, updated_at)
        VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, NOW(), NOW())
    ");
    
    if (!$stmt) {
        throw new Exception('Gagal mempersiapkan query database: ' . $koneksi->error);
    }

    $stmt->bind_param('sssisssss', $extplayer, $username, $ref, $amount, $bonus, $bukti_transfer_path, $bank_asal, $bank_tujuan, $status);

    if ($stmt->execute()) {
        
        // Amankan session saldo saat ini
        if (!isset($_SESSION['saldo'])) {
            $_SESSION['saldo'] = 0; 
        }

        // Simpan informasi QRIS ke dalam session user sebagai cadangan data halaman invoice
        $_SESSION['qr_image'] = $qr_url;
        $_SESSION['amount']   = $amount;
        $_SESSION['expired']  = $expired_at;

        // Catat riwayat log internal server
        $log_file = __DIR__ . '/qris_log.txt';
        $log_msg = "User: $username | Ref: $ref | Amount: $amount | Image: $nama_gambar";
        file_put_contents($log_file, "[" . date("Y-m-d H:i:s") . "] SUCCESS: " . $log_msg . "\n", FILE_APPEND);

        // Kembalikan respons sukses berformat JSON ke AJAX milik user dashboard
        echo json_encode([
            'success' => true,
            'message' => 'Deposit QRIS berhasil dibuat,Silahkan Scan QR Untuk Menyelesaikan Pembayaran',
            'data' => [
                'reference_number' => $ref,
                'amount' => number_format($amount, 0, ',', '.'),
                'expired_at' => $expired_at,
                'qr_image' => $qr_url,
                'qr_string' => 'MANUAL_QRIS'
            ]
        ]);

    } else {
        throw new Exception('Gagal menyimpan data deposit ke database: ' . $stmt->error);
    }

    $stmt->close();

} catch (Exception $e) {
    // Catat log jika terjadi kegagalan
    $log_file = __DIR__ . '/qris_log.txt';
    file_put_contents($log_file, "[" . date("Y-m-d H:i:s") . "] ERROR: " . $e->getMessage() . "\n", FILE_APPEND);
    
    echo json_encode([
        'success' => false,
        'message' => $e->getMessage()
    ]);
}
exit;
?>