<?php
// File: API_KONEKSI/admin/validasi_pembayaran.php
header('Content-Type: application/json');
include '../config/koneksi.php';
include '../config/id_generator.php';

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $pembayaran_id = $_POST['pembayaran_id'] ?? '';
    $reservasi_id = $_POST['reservasi_id'] ?? '';
    $action = $_POST['action'] ?? '';

    // Jika pembayaran_id kosong tetapi reservasi_id ada, coba cari atau buat data pembayaran baru
    if (empty($pembayaran_id) && !empty($reservasi_id)) {
        $stmt_check = $conn->prepare("SELECT pembayaran_id FROM dat_pembayaran WHERE reservasi_id = ?");
        $stmt_check->bind_param("s", $reservasi_id);
        $stmt_check->execute();
        $res_check = $stmt_check->get_result();
        if ($row_check = $res_check->fetch_assoc()) {
            $pembayaran_id = $row_check['pembayaran_id'];
        } else {
            $metode_id = "2"; // Default Bank BCA / Manual
            $pengirim_nm = "Admin";
            $asal_bank = "Manual";
            $transfer_bukti = "MANUAL_BY_ADMIN";
            $validasi_st = 'Pending';
            
            $new_pembayaran_id = generatePembayaranId($conn);
            $stmt_insert = $conn->prepare("INSERT INTO dat_pembayaran (pembayaran_id, reservasi_id, metode_id, pengirim_nm, asal_bank, transfer_bukti, validasi_st) VALUES (?, ?, ?, ?, ?, ?, ?)");
            $stmt_insert->bind_param("sssssss", $new_pembayaran_id, $reservasi_id, $metode_id, $pengirim_nm, $asal_bank, $transfer_bukti, $validasi_st);
            $stmt_insert->execute();
            $pembayaran_id = $new_pembayaran_id;
            $stmt_insert->close();
        }
        $stmt_check->close();
    }

    if (empty($pembayaran_id) || empty($reservasi_id) || empty($action)) {
        echo json_encode(["status" => "gagal", "pesan" => "Data tidak lengkap"]);
        exit;
    }

    $st_pembayaran = ($action === 'terima') ? 'Verified' : 'Rejected';
    $st_reservasi = ($action === 'terima') ? 'Verified' : 'Dibatalkan';

    $conn->begin_transaction();

    try {
        $stmt1 = $conn->prepare("UPDATE dat_pembayaran SET validasi_st = ? WHERE pembayaran_id = ?");
        $stmt1->bind_param("ss", $st_pembayaran, $pembayaran_id);
        $stmt1->execute();
        $stmt1->close();

        $stmt2 = $conn->prepare("UPDATE dat_reservasi SET reservasi_st = ? WHERE reservasi_id = ?");
        $stmt2->bind_param("ss", $st_reservasi, $reservasi_id);
        $stmt2->execute();
        $stmt2->close();

        $conn->commit();

        // --- LOGIKA NOTIFIKASI KE PELANGGAN PEMILIK RESERVASI ---
        $q_user = $conn->prepare("SELECT r.user_id, u.role_nm FROM dat_reservasi r JOIN mst_user u ON r.user_id = u.user_id WHERE r.reservasi_id = ?");
        $q_user->bind_param("s", $reservasi_id);
        $q_user->execute();
        $r_user = $q_user->get_result();

        if ($u_row = $r_user->fetch_assoc()) {
            // Hanya kirim notifikasi jika pembuat reservasi adalah Pelanggan
            if ($u_row['role_nm'] === 'Pelanggan') {
                $target_user = $u_row['user_id'];
                $tipe_notif = "transaksi";

                if ($action === 'terima') {
                    $judul_notif = "Pembayaran Berhasil! ✅";
                    $pesan_notif = "Hore! Pembayaran untuk booking jadwalmu udah dikonfirmasi. Siap-siap dandan yang rapi ya!";
                } else {
                    $judul_notif = "Pembayaran Ditolak ❌";
                    $pesan_notif = "Mohon maaf, bukti pembayaranmu tidak valid atau nominal tidak sesuai. Silakan hubungi admin.";
                }

                $notif_id = generateNotifId($conn);
                $stmt_notif = $conn->prepare("INSERT INTO dat_notifikasi (notif_id, user_id, tipe_notif, target_id, judul_tx, pesan_tx) VALUES (?, ?, ?, ?, ?, ?)");
                $stmt_notif->bind_param("ssssss", $notif_id, $target_user, $tipe_notif, $reservasi_id, $judul_notif, $pesan_notif);
                $stmt_notif->execute();
                $stmt_notif->close();
            }
        }
        $q_user->close();
        // --------------------------------------------------------

        echo json_encode(["status" => "sukses", "pesan" => "Transaksi berhasil divalidasi", "data" => []]);
    } catch (Exception $e) {
        $conn->rollback();
        echo json_encode(["status" => "gagal", "pesan" => "Terjadi kesalahan sistem", "data" => []]);
    }
}
$conn->close();
?>
