<?php
// bendahara/donasi/proses.php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
require_once '../../includes/config.php';
require_once '../../includes/database.php';
require_once '../../includes/functions.php';
require_once '../../includes/auth.php';

// Mulai session jika belum dimulai
if (session_status() == PHP_SESSION_NONE) {
    session_start();
}

// Cek apakah user sudah login dan role-nya bendahara
if (!isset($_SESSION['user_id']) || !isset($_SESSION['role']) || $_SESSION['role'] != 'bendahara') {
    // Redirect ke halaman login jika belum login atau bukan bendahara
    setFlash('login_required', 'Anda harus login sebagai bendahara untuk mengakses halaman ini', 'danger');
    header('Location: ' . SITE_URL . '/auth/login.php');
    exit;
}

// Cek apakah request method adalah POST
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
    setFlash('error', 'Metode request tidak valid', 'danger');
    header('Location: ' . SITE_URL . '/bendahara/donasi/index.php');
    exit;
}

// Ambil data dari form
$donasi_id = isset($_POST['donasi_id']) ? (int)$_POST['donasi_id'] : 0;
$action = isset($_POST['action']) ? $_POST['action'] : '';
$keterangan = isset($_POST['keterangan']) ? sanitize($_POST['keterangan']) : '';

// Validasi data
if (empty($donasi_id) || empty($action)) {
    setFlash('error', 'Data tidak lengkap', 'danger');
    header('Location: ' . SITE_URL . '/bendahara/donasi/index.php');
    exit;
}

// Koneksi database
$db = dbConnect();

// Cek apakah donasi ada dan statusnya masih menunggu
$db->query("SELECT d.*, k.judul as kampanye_judul, u.nama_lengkap as donatur_nama, u.id as donatur_id 
          FROM donasi d 
          JOIN kampanye k ON d.kampanye_id = k.id 
          JOIN users u ON d.user_id = u.id 
          WHERE d.id = :id");
$db->bind(':id', $donasi_id);
$donasi = $db->single();

if (!$donasi) {
    setFlash('error', 'Donasi tidak ditemukan', 'danger');
    header('Location: ' . SITE_URL . '/bendahara/donasi/index.php');
    exit;
}

if ($donasi->status !== 'menunggu') {
    setFlash('error', 'Donasi sudah diproses sebelumnya', 'danger');
    header('Location: ' . SITE_URL . '/bendahara/donasi/index.php');
    exit;
}

// Mulai transaksi database
$db->beginTransaction();

try {
    if ($action === 'verifikasi') {
        // Update status donasi
        $db->query("UPDATE donasi SET 
                   status = 'diverifikasi', 
                   verified_by_bendahara = :user_id, 
                   verified_at_bendahara = NOW() 
                   WHERE id = :id");
        $db->bind(':user_id', $_SESSION['user_id']);
        $db->bind(':id', $donasi_id);
        $db->execute();
        
        // Log aktivitas
        logActivity('Verifikasi donasi', 'donasi', $donasi_id, 'Bendahara memverifikasi donasi dari ' . ($donasi->is_anonim ? 'Anonim' : $donasi->donatur_nama) . ' untuk kampanye ' . $donasi->kampanye_judul . '. Jumlah: ' . rupiah($donasi->jumlah) . '. Keterangan: ' . $keterangan);
        
        // Buat notifikasi untuk donatur
        createNotification(
		$db, // ← kirim objek yang sedang aktif
            $donasi->donatur_id,
            'Donasi Diverifikasi',
            'Donasi Anda sebesar ' . rupiah($donasi->jumlah) . ' untuk kampanye "' . $donasi->kampanye_judul . '" telah diverifikasi.',
            SITE_URL . '/user/donasi/index.php'
        );
        
        // Buat notifikasi untuk ketua
        $db->query("SELECT id FROM users WHERE role = 'ketua'");
        $ketua = $db->resultSet();
        foreach ($ketua as $user) {
            createNotification(
			$db, // ← kirim objek yang sedang aktif
                $user->id,
                'Donasi Baru Diverifikasi',
                'Donasi sebesar ' . rupiah($donasi->jumlah) . ' untuk kampanye "' . $donasi->kampanye_judul . '" telah diverifikasi oleh Bendahara.',
                SITE_URL . '/ketua/laporan/index.php'
            );
        }
        
        // Buat notifikasi untuk pengawas
        $db->query("SELECT id FROM users WHERE role = 'pengawas'");
        $pengawas = $db->resultSet();
        foreach ($pengawas as $user) {
            createNotification(
			$db, // ← kirim objek yang sedang aktif
                $user->id,
                'Donasi Baru Diverifikasi',
                'Donasi sebesar ' . rupiah($donasi->jumlah) . ' untuk kampanye "' . $donasi->kampanye_judul . '" telah diverifikasi oleh Bendahara.',
                SITE_URL . '/pengawas/laporan/index.php'
            );
        }
        
        $message = 'Donasi berhasil diverifikasi';
        $type = 'success';
    } elseif ($action === 'tolak') {
        // Validasi keterangan penolakan
        if (empty($keterangan)) {
            throw new Exception('Alasan penolakan wajib diisi');
        }
        
        // Update status donasi
        $db->query("UPDATE donasi SET 
                   status = 'ditolak', 
                   verified_by_bendahara = :user_id, 
                   verified_at_bendahara = NOW() 
                   WHERE id = :id");
        $db->bind(':user_id', $_SESSION['user_id']);
        $db->bind(':id', $donasi_id);
        $db->execute();
        
        // Log aktivitas
        logActivity('Tolak donasi', 'donasi', $donasi_id, 'Bendahara menolak donasi dari ' . ($donasi->is_anonim ? 'Anonim' : $donasi->donatur_nama) . ' untuk kampanye ' . $donasi->kampanye_judul . '. Jumlah: ' . rupiah($donasi->jumlah) . '. Alasan: ' . $keterangan);
        
        // Buat notifikasi untuk donatur
        // createNotification(
		// $db, // ← kirim objek yang sedang aktif
            // $donasi->donatur_id,
            // 'Donasi Ditolak',
            // 'Donasi Anda sebesar ' . rupiah($donasi->jumlah) . ' untuk kampanye "' . $donasi->kampanye_judul . '" telah ditolak. Alasan: ' . $keterangan,
            // SITE_URL . '/user/donasi/index.php'
        // );
        
        $message = 'Donasi telah ditolak';
        $type = 'success';
    } else {
        throw new Exception('Aksi tidak valid');
    }
    
    // Commit transaksi
    $db->endTransaction();
    
    setFlash('donasi', $message, $type);
    header('Location: ' . SITE_URL . '/bendahara/donasi/index.php');
    exit;
} catch (Exception $e) {
    // Rollback transaksi jika terjadi error
    $db->cancelTransaction();
    
    setFlash('error', 'Error: ' . $e->getMessage(), 'danger');
    header('Location: ' . SITE_URL . '/bendahara/donasi/index.php');
    exit;
}
?>