<?php
session_start();
if (!isset($_SESSION['user_id'])) {
    echo json_encode(["status" => "error", "pesan" => "Akses ditolak. Silakan login."]);
    exit;
}
mysqli_report(MYSQLI_REPORT_OFF); 
include 'koneksi.php';

include 'koneksi.php';
$aksi = $_GET['aksi'];

// 🛡️ PROTEKSI KEAMANAN GLOBAL UNTUK WARGA
$role_aktif = $_SESSION['role'] ?? 'warga';

// Jika aksi adalah sesuatu yang merubah data (simpan, update, hapus)
if (in_array($aksi, ['simpan', 'update', 'hapus', 'update_lokasi', 'simpan_bantuan', 'update_bantuan', 'hapus_bantuan'])) {
    
    // Blokir total jika role-nya adalah warga atau walikota
    if ($role_aktif === 'warga' || $role_aktif === 'walikota') {
        echo "Gagal: Akses ditolak. Warga hanya diizinkan untuk melihat data dan melakukan donasi.";
        exit;
    }
}

// Fungsi hitung jarak radius di sisi Server (Backend Security)
function hitungJarak($lat1, $lon1, $lat2, $lon2) {
    $earth_radius = 6371000; // Radius bumi dalam meter
    $dLat = deg2rad($lat2 - $lat1);
    $dLon = deg2rad($lon2 - $lon1);
    $a = sin($dLat/2) * sin($dLat/2) + cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * sin($dLon/2) * sin($dLon/2);
    $c = 2 * asin(sqrt($a));
    return $earth_radius * $c;
}

header('Content-Type: application/json'); 

$nama_tabel_bantuan = 'histori_bantuan'; 
$aksi = $_GET['aksi'] ?? '';

// Ambil Sesi Global
$role = $_SESSION['role'] ?? '';
$nama_masjid = $_SESSION['nama_masjid'] ?? '';
$user_id = $_SESSION['user_id'] ?? 0;

if ($aksi == 'tampil') {
    $query = $conn->query("SELECT * FROM warga_miskin"); 
    
    if (!$query) {
        echo json_encode(["error" => "Gagal memuat data warga_miskin: " . $conn->error]);
        exit;
    }
    
    $result = [];
    while ($row = $query->fetch_assoc()) {
        $id_warga = $row['id'];
        
        // 1. Ambil data anggota keluarga
        $query_anggota = $conn->query("SELECT * FROM anggota_keluarga WHERE id_warga = '$id_warga'");
        $anggota = [];
        if ($query_anggota) {
            while ($row_anggota = $query_anggota->fetch_assoc()) {
                $anggota[] = $row_anggota;
            }
        }
        $row['anggota'] = $anggota; 

        // 2. Ambil bantuan TERAKHIR
        $query_bantuan = $conn->query("
            SELECT * FROM $nama_tabel_bantuan 
            WHERE warga_id = '$id_warga' 
            ORDER BY tanggal_distribusi DESC 
            LIMIT 1
        ");
        
        if ($query_bantuan && $query_bantuan->num_rows > 0) {
            $bantuan_terakhir = $query_bantuan->fetch_assoc();
            
            $tgl_bantuan = new DateTime($bantuan_terakhir['tanggal_distribusi']);
            $tgl_sekarang = new DateTime();
            $interval = $tgl_sekarang->diff($tgl_bantuan);
            
            $selisih_bulan = ($interval->y * 12) + $interval->m;
            $sumber = $bantuan_terakhir['nama_penyalur'] ?: 'Rumah Ibadah';
            
            if ($selisih_bulan == 0) {
                $row['status_bantuan'] = "Warga ini baru saja menerima bantuan bulan ini dari " . $sumber;
            } else {
                $row['status_bantuan'] = "Warga ini terakhir menerima bantuan " . $selisih_bulan . " bulan lalu dari " . $sumber;
            }
        } else {
            $row['status_bantuan'] = "Warga ini belum pernah menerima bantuan.";
        }
        
        $result[] = $row;
    }
    
    echo json_encode($result);
    exit;

} elseif ($aksi == 'tampil_bantuan') {
    $query = $conn->query("
        SELECT 
            h.id, h.warga_id, h.tanggal_distribusi AS tanggal, h.nama_penyalur AS sumber_bantuan,
            IF(h.catatan IS NOT NULL AND h.catatan != '', h.catatan, 'Bantuan Sosial') AS jenis_bantuan,
            w.nama_kk, w.lat, w.lng 
        FROM $nama_tabel_bantuan h
        JOIN warga_miskin w ON h.warga_id = w.id
        ORDER BY h.tanggal_distribusi DESC
    ");

    $bantuan = [];
    if ($query) {
        while ($row = $query->fetch_assoc()) { $bantuan[] = $row; }
    }
    echo json_encode($bantuan);
    exit;

} elseif ($aksi == 'simpan') {
    $nama   = $conn->real_escape_string($_POST['nama_kk'] ?? '');
    $jml    = intval($_POST['jumlah_anggota'] ?? 0);
    $alamat = $conn->real_escape_string($_POST['alamat'] ?? '');
    $lat    = floatval($_POST['lat'] ?? 0);
    $lng    = floatval($_POST['lng'] ?? 0);

    $pekerjaan = $conn->real_escape_string($_POST['pekerjaan'] ?? '');
    $penyakit  = $conn->real_escape_string($_POST['riwayat_penyakit'] ?? '');
    
    $tgl_lahir  = !empty($_POST['tanggal_lahir']) ? "'" . $conn->real_escape_string($_POST['tanggal_lahir']) . "'" : "NULL";
    $pendidikan = !empty($_POST['pendidikan_terakhir']) ? "'" . $conn->real_escape_string($_POST['pendidikan_terakhir']) . "'" : "NULL";
    $jaminan    = !empty($_POST['kepemilikan_jaminan']) ? "'" . $conn->real_escape_string($_POST['kepemilikan_jaminan']) . "'" : "NULL";

    $fakir   = isset($_POST['is_fakir_miskin']) ? intval($_POST['is_fakir_miskin']) : 0;
    $dhuafa  = isset($_POST['is_dhuafa']) ? intval($_POST['is_dhuafa']) : 0;
    $lansia  = isset($_POST['is_lansia_tunggal']) ? intval($_POST['is_lansia_tunggal']) : 0;
    $yatim   = isset($_POST['is_anak_yatim']) ? intval($_POST['is_anak_yatim']) : 0;
    $bencana = isset($_POST['is_korban_bencana']) ? intval($_POST['is_korban_bencana']) : 0;
    $disab   = isset($_POST['is_disabilitas']) ? intval($_POST['is_disabilitas']) : 0;

    if (trim($nama) === '' || $jml <= 0 || trim($alamat) === '' || !isset($_POST['lat']) || !isset($_POST['lng'])) {
        echo json_encode(["status" => "Gagal", "pesan" => "Data utama tidak lengkap"]);
        exit;
    }

    // PERBAIKAN: Menambahkan diinput_oleh_id agar tombol Edit/Hapus bisa muncul di akun pengurus
    $sql = "INSERT INTO warga_miskin 
            (nama_kk, jumlah_anggota, alamat, lat, lng, tanggal_lahir, pendidikan_terakhir, pekerjaan, riwayat_penyakit, kepemilikan_jaminan,
             is_fakir_miskin, is_dhuafa, is_lansia_tunggal, is_anak_yatim, is_korban_bencana, is_disabilitas, diinput_oleh_id) 
            VALUES 
            ('$nama', $jml, '$alamat', $lat, $lng, $tgl_lahir, $pendidikan, '$pekerjaan', '$penyakit', $jaminan,
             $fakir, $dhuafa, $lansia, $yatim, $bencana, $disab, $user_id)";
            
    if ($conn->query($sql)) {
        $id_warga = $conn->insert_id; 
        $anggota_json = $_POST['anggota'] ?? '[]';
        $anggota_list = json_decode($anggota_json, true);

        if (!empty($anggota_list) && is_array($anggota_list)) {
            foreach ($anggota_list as $an) {
                $an_nama    = $conn->real_escape_string($an['nama'] ?? '');
                $an_hub     = $conn->real_escape_string($an['hubungan_kk'] ?? '');
                $an_jk      = !empty($an['jenis_kelamin']) ? "'" . $conn->real_escape_string($an['jenis_kelamin']) . "'" : 'NULL';
                $an_tgl     = !empty($an['tanggal_lahir']) ? "'" . $conn->real_escape_string($an['tanggal_lahir']) . "'" : 'NULL';
                $an_pend    = !empty($an['pendidikan_terakhir']) ? "'" . $conn->real_escape_string($an['pendidikan_terakhir']) . "'" : 'NULL';
                $an_kerja   = $conn->real_escape_string($an['pekerjaan'] ?? '');
                $an_sakit   = $conn->real_escape_string($an['riwayat_penyakit'] ?? '');
                $an_jamin   = !empty($an['kepemilikan_jaminan']) ? "'" . $conn->real_escape_string($an['kepemilikan_jaminan']) . "'" : 'NULL';

                $conn->query("
                    INSERT INTO anggota_keluarga
                        (id_warga, nama, tanggal_lahir, jenis_kelamin, hubungan_kk, pendidikan_terakhir, pekerjaan, riwayat_penyakit, kepemilikan_jaminan)
                    VALUES
                        ($id_warga, '$an_nama', $an_tgl, $an_jk, '$an_hub', $an_pend, '$an_kerja', '$an_sakit', $an_jamin)
                ");
            }
        }
        echo "Sukses";
    } else {
        echo "Gagal: " . $conn->error;
    }
    exit;

} elseif ($aksi == 'hapus') {
    $id = intval($_POST['id'] ?? 0);

    // PROTEKSI GEO-FENCING BACKEND
    if ($role === 'pengurus_masjid') {
        $wargaRes = $conn->query("SELECT lat, lng FROM warga_miskin WHERE id = $id");
        $masjidRes = $conn->query("SELECT lat, lng, radius FROM rumah_ibadah WHERE nama_tempat = '$nama_masjid'");

        if ($wargaRes && $masjidRes && $wargaRes->num_rows > 0 && $masjidRes->num_rows > 0) {
            $warga = $wargaRes->fetch_assoc();
            $masjid = $masjidRes->fetch_assoc();
            
            $jarak = hitungJarak($warga['lat'], $warga['lng'], $masjid['lat'], $masjid['lng']);
            if ($jarak > $masjid['radius']) {
                echo "Gagal: Warga berada di luar radius wewenang masjid Anda.";
                exit;
            }
        }
    } elseif ($role !== 'admin') {
        echo "Gagal: Akses ditolak.";
        exit;
    }
    
    // PERBAIKAN: Perintah Hapus Utama Ditambahkan
    $conn->query("DELETE FROM anggota_keluarga WHERE id_warga = $id"); // Hapus data anak tabel dulu
    if ($conn->query("DELETE FROM warga_miskin WHERE id = $id")) {
        echo "Sukses";
    } else {
        echo "Gagal: " . $conn->error;
    }
    exit;

} elseif ($aksi == 'update') {
    $id = intval($_POST['id'] ?? 0);

    // PROTEKSI GEO-FENCING BACKEND
    if ($role === 'pengurus_masjid') {
        $wargaRes = $conn->query("SELECT lat, lng FROM warga_miskin WHERE id = $id");
        $masjidRes = $conn->query("SELECT lat, lng, radius FROM rumah_ibadah WHERE nama_tempat = '$nama_masjid'");

        if ($wargaRes && $masjidRes && $wargaRes->num_rows > 0 && $masjidRes->num_rows > 0) {
            $warga = $wargaRes->fetch_assoc();
            $masjid = $masjidRes->fetch_assoc();
            
            $jarak = hitungJarak($warga['lat'], $warga['lng'], $masjid['lat'], $masjid['lng']);
            if ($jarak > $masjid['radius']) {
                echo "Gagal: Warga berada di luar radius wewenang masjid Anda.";
                exit;
            }
        } else {
            echo "Gagal: Data gagal diverifikasi.";
            exit;
        }
    } elseif ($role !== 'admin') {
        echo "Gagal: Akses ditolak.";
        exit;
    }

    // PERBAIKAN: Menangkap Semua Post Data dan Mengeksekusi Update
    $nama   = $conn->real_escape_string($_POST['nama_kk'] ?? '');
    $jml    = intval($_POST['jumlah_anggota'] ?? 0);
    $alamat = $conn->real_escape_string($_POST['alamat'] ?? '');
    $pekerjaan = $conn->real_escape_string($_POST['pekerjaan'] ?? '');
    $penyakit  = $conn->real_escape_string($_POST['riwayat_penyakit'] ?? '');
    $tgl_lahir  = !empty($_POST['tanggal_lahir']) ? "'" . $conn->real_escape_string($_POST['tanggal_lahir']) . "'" : "NULL";
    $pendidikan = !empty($_POST['pendidikan_terakhir']) ? "'" . $conn->real_escape_string($_POST['pendidikan_terakhir']) . "'" : "NULL";
    $jaminan    = !empty($_POST['kepemilikan_jaminan']) ? "'" . $conn->real_escape_string($_POST['kepemilikan_jaminan']) . "'" : "NULL";

    $fakir   = isset($_POST['is_fakir_miskin']) ? intval($_POST['is_fakir_miskin']) : 0;
    $dhuafa  = isset($_POST['is_dhuafa']) ? intval($_POST['is_dhuafa']) : 0;
    $lansia  = isset($_POST['is_lansia_tunggal']) ? intval($_POST['is_lansia_tunggal']) : 0;
    $yatim   = isset($_POST['is_anak_yatim']) ? intval($_POST['is_anak_yatim']) : 0;
    $bencana = isset($_POST['is_korban_bencana']) ? intval($_POST['is_korban_bencana']) : 0;
    $disab   = isset($_POST['is_disabilitas']) ? intval($_POST['is_disabilitas']) : 0;

    $sql = "UPDATE warga_miskin SET 
            nama_kk = '$nama', jumlah_anggota = $jml, alamat = '$alamat', 
            tanggal_lahir = $tgl_lahir, pendidikan_terakhir = $pendidikan, pekerjaan = '$pekerjaan', 
            riwayat_penyakit = '$penyakit', kepemilikan_jaminan = $jaminan,
            is_fakir_miskin = $fakir, is_dhuafa = $dhuafa, is_lansia_tunggal = $lansia, 
            is_anak_yatim = $yatim, is_korban_bencana = $bencana, is_disabilitas = $disab 
            WHERE id = $id";

    if ($conn->query($sql)) {
        echo "Sukses";
    } else {
        echo "Gagal: " . $conn->error;
    }
    exit;

} elseif ($aksi == 'update_lokasi') {
    $id  = intval($_POST['id'] ?? 0);
    $lat = floatval($_POST['lat'] ?? 0);
    $lng = floatval($_POST['lng'] ?? 0);

    if ($conn->query("UPDATE warga_miskin SET lat=$lat, lng=$lng WHERE id=$id")) {
        echo "Sukses";
    } else {
        echo "Gagal: " . $conn->error;
    }
    exit;

} elseif ($aksi == 'simpan_bantuan') {
    $warga_id = intval($_POST['warga_id'] ?? 0);
    $jenis_id = intval($_POST['jenis_id'] ?? 0); 
    $tgl      = $conn->real_escape_string($_POST['tanggal_distribusi'] ?? '');
    $penyalur = $conn->real_escape_string($_POST['nama_penyalur'] ?? '');
    $deskripsi= $conn->real_escape_string($_POST['deskripsi_bantuan'] ?? ''); 
    $catatan  = $conn->real_escape_string($_POST['catatan'] ?? '');

    if ($warga_id <= 0 || $jenis_id <= 0 || $tgl == '' || $penyalur == '' || $deskripsi == '') {
        echo "Gagal: Data tidak lengkap";
        exit;
    }

    $sql = "INSERT INTO $nama_tabel_bantuan 
            (warga_id, jenis_id, tanggal_distribusi, nama_penyalur, jumlah, satuan_custom, catatan) 
            VALUES 
            ($warga_id, $jenis_id, '$tgl', '$penyalur', 1, '$deskripsi', '$catatan')";

    if ($conn->query($sql)) {
        echo "Sukses";
    } else {
        echo "Gagal: " . $conn->error;
    }
    exit;

} elseif ($aksi == 'update_bantuan') {
    $id       = intval($_POST['id'] ?? 0);
    $jenis_id = intval($_POST['jenis_id'] ?? 0); 
    $tgl      = $conn->real_escape_string($_POST['tanggal_distribusi'] ?? '');
    $penyalur = $conn->real_escape_string($_POST['nama_penyalur'] ?? '');
    $deskripsi= $conn->real_escape_string($_POST['deskripsi_bantuan'] ?? ''); 
    $catatan  = $conn->real_escape_string($_POST['catatan'] ?? '');

    if ($id <= 0 || $jenis_id <= 0 || $tgl == '' || $penyalur == '' || $deskripsi == '') {
        echo "Gagal: Data tidak lengkap";
        exit;
    }

    $sql = "UPDATE $nama_tabel_bantuan SET 
                jenis_id = $jenis_id,
                tanggal_distribusi = '$tgl',
                nama_penyalur = '$penyalur',
                satuan_custom = '$deskripsi',
                catatan = '$catatan'
            WHERE id = $id";

    if ($conn->query($sql)) {
        echo "Sukses";
    } else {
        echo "Gagal: " . $conn->error;
    }
    exit;

} elseif ($aksi == 'hapus_bantuan') {
    $id = intval($_POST['id'] ?? 0);

    if ($id <= 0) {
        echo "Gagal: ID tidak valid";
        exit;
    }

    $sql = "DELETE FROM $nama_tabel_bantuan WHERE id = $id";

    if ($conn->query($sql)) {
        echo "Sukses";
    } else {
        echo "Gagal: " . $conn->error;
    }
    exit;
}

$conn->close();
?>