<?php
ob_start(); // ← ob_start PERTAMA, sebelum apapun

session_start();
error_reporting(0);
ini_set('display_errors', 0);

header('Content-Type: application/json'); // ← header setelah ob_start aman

if (!isset($_SESSION['user_id'])) {
    ob_end_clean(); // ← sekarang ini valid karena ob_start sudah jalan
    echo json_encode(["status" => "error", "pesan" => "Akses ditolak. Silakan login."]);
    exit;
}

// KONEKSI DATABASE STANDAR PDO
include 'koneksi.php';

// POST request dari form donasi tidak membawa ?aksi=, default ke 'simpan'
$aksi = $_GET['aksi'] ?? ($_SERVER['REQUEST_METHOD'] === 'POST' ? 'simpan' : 'tampil');

// 0. CREATE: SIMPAN DONASI BARU DARI WARGA
if ($aksi == 'simpan') {
    $metode  = $_POST['metode']  ?? '';
    $nominal = intval($_POST['nominal'] ?? 0);
    $nama    = trim($_POST['nama']  ?? 'Anonim');
    $pesan   = trim($_POST['pesan'] ?? '');
    $ibadahId = intval($_POST['ibadah_id'] ?? 0);
    $jenisDonasi = trim($_POST['jenis_donasi'] ?? 'Uang Tunai');
    $deskripsiBarang = trim($_POST['deskripsi_barang'] ?? '');

    // Validasi minimal
    if (empty($metode)) {
        echo json_encode(["status" => "error", "pesan" => "Metode pembayaran wajib diisi."]);
        exit;
    }
    if ($jenisDonasi === 'Uang Tunai') {
        if ($nominal < 10000) {
            echo json_encode(["status" => "error", "pesan" => "Nominal minimal Rp 10.000."]);
            exit;
        }
    } else {
        // Donasi barang — metode tidak wajib, deskripsi wajib
        if (empty($deskripsiBarang)) {
            echo json_encode(["status" => "error", "pesan" => "Deskripsi barang wajib diisi."]);
            exit;
        }
    }

    // Upload bukti (opsional untuk donasi barang)
    $buktiPath = '';
    if (isset($_FILES['bukti']) && $_FILES['bukti']['error'] === UPLOAD_ERR_OK) {
        $uploadDir = 'uploads/bukti_donasi/';
        if (!is_dir($uploadDir)) mkdir($uploadDir, 0755, true);
        
        $ext = strtolower(pathinfo($_FILES['bukti']['name'], PATHINFO_EXTENSION));
        $allowed = ['jpg', 'jpeg', 'png', 'webp', 'pdf'];
        
        if (!in_array($ext, $allowed)) {
            echo json_encode(["status" => "error", "pesan" => "Format file tidak didukung."]);
            exit;
        }
        
        $namaFile = 'donasi_' . time() . '_' . uniqid() . '.' . $ext;
        move_uploaded_file($_FILES['bukti']['tmp_name'], $uploadDir . $namaFile);
        $buktiPath = $uploadDir . $namaFile;
    }

    // Untuk donasi barang, simpan deskripsi di kolom pesan_dukungan
    $pesanFinal = $jenisDonasi !== 'Uang Tunai' 
        ? "[BARANG] $deskripsiBarang" . ($pesan ? " | Pesan: $pesan" : '')
        : $pesan;

    // Ibadah ID 0 artinya umum, simpan sebagai NULL
    $ibadahIdFinal = $ibadahId > 0 ? $ibadahId : null;

    $stmt = $pdo->prepare("
        INSERT INTO donasi_digital 
            (metode_pembayaran, nominal, nama_donatur, pesan_dukungan, ibadah_id, bukti_transfer, status, created_at, jenis_donasi, deskripsi_barang)
        VALUES 
            (?, ?, ?, ?, ?, ?, 'pending', NOW(), ?, ?)
    ");

    if ($stmt->execute([$metode, $nominal, $nama, $pesanFinal, $ibadahIdFinal, $buktiPath, $jenisDonasi, $deskripsiBarang])) {
        echo json_encode(["status" => "sukses", "pesan" => "Donasi berhasil dikirim."]);
    } else {
        echo json_encode(["status" => "error", "pesan" => "Gagal menyimpan ke database."]);
    }
    exit;
}

// 1. READ: TAMPILKAN LOG DONASI KE DASHBOARD
if ($aksi == 'tampil') {
    $stmt = $pdo->query("
        SELECT d.*, r.nama_tempat AS disalurkan_ke 
        FROM donasi_digital d
        LEFT JOIN rumah_ibadah r ON d.ibadah_id = r.id
        ORDER BY d.id DESC
    ");
    $donasi = $stmt->fetchAll(PDO::FETCH_ASSOC);
    
    // TRANSFORMAST DATA: Menerjemahkan bahasa Database ke bahasa UI Dashboard
    foreach ($donasi as &$d) {
        $status_db = strtolower($d['status'] ?? '');
        
        if ($status_db == 'pending') {
            $d['status'] = 'Menunggu';
        } elseif ($status_db == 'berhasil') {
            $d['status'] = 'Dikonfirmasi';
        } elseif ($status_db == 'ditolak' || $status_db == 'gagal') {
            $d['status'] = 'Ditolak';
        }
        
        // Gunakan jenis_donasi dari database (bisa 'Uang Tunai', 'Sembako', 'Pakaian', dll.)
        $jenis = !empty($d['jenis_donasi']) ? $d['jenis_donasi'] : 'Uang Tunai';
        $d['jenis_donasi'] = $jenis;

        // Untuk donasi uang: tampilkan nominal + metode pembayaran
        // Untuk donasi barang: tampilkan deskripsi barang
        if ($jenis === 'Uang Tunai') {
            $d['nilai'] = number_format((float)$d['nominal'], 0, ',', '.');
            $d['keterangan'] = $d['pesan_dukungan'] . ($d['metode_pembayaran'] ? " (" . $d['metode_pembayaran'] . ")" : "");
        } else {
            // Donasi barang: nilai diisi deskripsi barang, bukan nominal
            $deskripsi = !empty($d['deskripsi_barang']) ? $d['deskripsi_barang'] : '';
            $d['nilai'] = $deskripsi ?: ($d['pesan_dukungan'] ?: '—');
            $d['keterangan'] = $d['pesan_dukungan'];
        }

        $d['tanggal'] = date('Y-m-d', strtotime($d['created_at']));
        $d['kontak'] = "Bukti: " . $d['bukti_transfer'];
        
        if (empty($d['disalurkan_ke'])) {
            $d['disalurkan_ke'] = 'Umum';
        }
    }
    
    echo json_encode($donasi);
    exit;

// 2. UPDATE: KONFIRMASI / TOLAK DONASI
} elseif ($aksi == 'update_status') {
    $id = intval($_POST['id'] ?? 0);
    $status_ui = $_POST['status'] ?? 'Menunggu'; 
    
    // PENERJEMAH KE DATABASE: Mengubah bahasa UI kembali ke bahasa Database
    $status_db = 'pending';
    if ($status_ui == 'Dikonfirmasi') {
        $status_db = 'berhasil';
    } elseif ($status_ui == 'Ditolak') {
        $status_db = 'gagal';  // enum DB: 'gagal', bukan 'ditolak'
    }

    $stmt = $pdo->prepare("UPDATE donasi_digital SET status = ? WHERE id = ?");
    if ($stmt->execute([$status_db, $id])) {
        echo "Sukses";
    } else {
        echo "Gagal memperbarui status";
    }
    exit;

// 3. DELETE: HAPUS LOG DONASI
} elseif ($aksi == 'hapus') {
    $id = intval($_POST['id'] ?? 0);
    $stmt = $pdo->prepare("DELETE FROM donasi_digital WHERE id = ?");
    if ($stmt->execute([$id])) {
        echo "Sukses";
    } else {
        echo "Gagal menghapus data";
    }
    exit;
}
?>