<?php
// api/rumah_warga.php
header('Content-Type: application/json');
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS');
header('Access-Control-Allow-Headers: Content-Type');
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') { http_response_code(204); exit; }

require_once '../config/db.php';
require_once 'middleware.php';

$method = $_SERVER['REQUEST_METHOD'];

// ════════════════════════════════════════════════════════════════════════════
//  FUNGSI: Hitung rekomendasi bantuan otomatis berdasarkan data anggota
// ════════════════════════════════════════════════════════════════════════════
function hitungRekomendasi(mysqli $conn, int $wargaId, float $penghasilan, string $statusPekerjaan): string
{
    $today = new DateTime();

    // Ambil semua anggota keluarga
    $res  = $conn->query("SELECT tanggal_lahir, status_bekerja, dapat_bekerja, kondisi_kesehatan FROM anggota_keluarga WHERE rumah_warga_id = $wargaId");
    $anggota = [];
    while ($r = $res->fetch_assoc()) $anggota[] = $r;

    $adaProduktif        = false;  // usia 18-55 th
    $adaProduktifBisaKerja = false;  // produktif & bisa kerja & belum bekerja tetap
    $semuaProduktifTakBisa = true;   // semua yg produktif tidak bisa kerja

    foreach ($anggota as $a) {
        $usia = null;
        if ($a['tanggal_lahir']) {
            $lahir = new DateTime($a['tanggal_lahir']);
            $usia  = (int)$today->diff($lahir)->y;
        }

        if ($usia !== null && $usia >= 18 && $usia <= 55) {
            $adaProduktif = true;
            $bisaKerja    = (int)$a['dapat_bekerja'] === 1
                         && in_array($a['kondisi_kesehatan'], ['sehat', 'sakit_ringan']);

            if ($bisaKerja) $semuaProduktifTakBisa = false;

            // Produktif, bisa kerja, belum bekerja tetap → kandidat pelatihan
            if ($bisaKerja && $a['status_bekerja'] !== 'bekerja') {
                $adaProduktifBisaKerja = true;
            }
        }
    }

    // Kriteria bantuan rutin
    $perluRutin = !$adaProduktif
               || ($adaProduktif && $semuaProduktifTakBisa)
               || $penghasilan < 500000
               || $statusPekerjaan === 'tidak_bekerja';

    // Kriteria bantuan pelatihan
    $perluPelatihan = $adaProduktifBisaKerja;

    if ($perluRutin && $perluPelatihan) return 'keduanya';
    if ($perluRutin)                    return 'bantuan_rutin';
    if ($perluPelatihan)                return 'bantuan_pelatihan';
    return 'tidak_ada';
}

// ════════════════════════════════════════════════════════════════════════════
//  FUNGSI: Hitung kategori kesejahteraan otomatis berdasarkan data warga
// ════════════════════════════════════════════════════════════════════════════
function hitungKategoriKesejahteraan(float $penghasilan, int $tanggungan, string $statusTempatTinggal, string $sumberAir): string
{
    // Logika sederhana:
    // Jika penghasilan sangat rendah dan tanggungan banyak
    $pendapatanPerKapita = $tanggungan > 0 ? $penghasilan / $tanggungan : $penghasilan;

    $skor = 0;
    
    if ($pendapatanPerKapita < 300000) {
        $skor += 40;
    } elseif ($pendapatanPerKapita < 600000) {
        $skor += 20;
    }

    if ($statusTempatTinggal === 'numpang' || $statusTempatTinggal === 'sewa') {
        $skor += 20;
    }
    
    if ($sumberAir === 'sungai' || $sumberAir === 'hujan') {
        $skor += 10;
    }

    if ($skor >= 50) return 'sangat_miskin';
    if ($skor >= 20) return 'miskin';
    return 'rentan_miskin';
}

// ════════════════════════════════════════════════════════════════════════════
//  FUNGSI: Memeriksa akses koordinator berdasarkan kelurahan/kecamatan ATAU radius geografis <= 5km
// ════════════════════════════════════════════════════════════════════════════
function checkCoordinatorAccess(mysqli $conn, int $koorIbadahId, float $lat, float $lng, string $kelurahan, string $kecamatan): bool
{
    $wilRes = $conn->query("SELECT latitude, longitude, kelurahan, kecamatan FROM rumah_ibadah WHERE id = $koorIbadahId");
    if ($wil = $wilRes->fetch_assoc()) {
        // Cek 1: Pencocokan nama kelurahan/kecamatan (sebagai fallback tangguh)
        $kel = strtolower($wil['kelurahan']);
        $kec = strtolower($wil['kecamatan']);
        $wKel = strtolower(trim($kelurahan));
        $wKec = strtolower(trim($kecamatan));
        if (($kel !== '' && strpos($wKel, $kel) !== false) || ($kec !== '' && strpos($wKec, $kec) !== false)) {
            return true;
        }

        // Cek 2: Jarak radius geografis <= 5000m (karena batas slider maksimal 5km)
        $lat1 = (float)$wil['latitude'];
        $lng1 = (float)$wil['longitude'];
        if ($lat1 !== 0.0 && $lng1 !== 0.0 && $lat !== 0.0 && $lng !== 0.0) {
            $earthRadius = 6371000;
            $dLat = deg2rad($lat - $lat1);
            $dLng = deg2rad($lng - $lng1);
            $a = sin($dLat/2) * sin($dLat/2) + cos(deg2rad($lat1)) * cos(deg2rad($lat)) * sin($dLng/2) * sin($dLng/2);
            $c = 2 * atan2(sqrt($a), sqrt(1-$a));
            $dist = $earthRadius * $c;
            if ($dist <= 5000.0) {
                return true;
            }
        }
    }
    return false;
}

// ════════════════════════════════════════════════════════════════════════════
switch ($method) {
    // ── GET ──────────────────────────────────────────────────────────────────
    case 'GET':
        // Izinkan guest mode (opsional) untuk melihat data rumah warga
        $currentUser = optionalAuth();
        $isGuest = $currentUser === null;
        
        // Jika tidak login (guest), validasi akses
        if ($isGuest) {
            $currentUser = ['role' => 'guest'];
        } else {
            // Validasi role jika sudah login
            if (!in_array($currentUser['role'], ['admin', 'petugas', 'koordinator', 'kontributor'])) {
                http_response_code(403);
                echo json_encode(['success' => false, 'message' => 'Forbidden: Role Anda tidak memiliki akses.']);
                exit;
            }
        }

        if (isset($_GET['id'])) {
            $id  = (int)$_GET['id'];
            $res = $conn->query("SELECT * FROM rumah_warga WHERE id=$id");
            if ($row = $res->fetch_assoc()) {
                // Batasi Koordinator agar hanya bisa melihat detail warga di wilayah tugasnya sendiri (radius / kelurahan / kecamatan)
                if ($currentUser['role'] === 'koordinator') {
                    $koorIbadahId = (int)$currentUser['rumah_ibadah_id'];
                    $lat = (float)($row['latitude'] ?? 0);
                    $lng = (float)($row['longitude'] ?? 0);
                    $kelurahan = $row['kelurahan'] ?? '';
                    $kecamatan = $row['kecamatan'] ?? '';
                    if (!checkCoordinatorAccess($conn, $koorIbadahId, $lat, $lng, $kelurahan, $kecamatan)) {
                        http_response_code(403);
                        echo json_encode(['success' => false, 'message' => 'Forbidden: Detail warga di luar wilayah tugas Anda.']);
                        exit;
                    }
                }

                // Sertakan anggota keluarga jika bukan koordinator / kontributor / guest
                if ($currentUser['role'] === 'koordinator') {
                    $row['anggota'] = [];
                    unset($row['no_kk']);
                    unset($row['nik']);
                    unset($row['penghasilan_bulanan']);
                    unset($row['pekerjaan']);
                    unset($row['status_pekerjaan']);
                    unset($row['luas_rumah']);
                    unset($row['jenis_lantai']);
                    unset($row['jenis_dinding']);
                    unset($row['sumber_air']);
                    unset($row['status_tempat_tinggal']);
                    unset($row['keterangan']);
                    unset($row['skor_kepercayaan']);
                    unset($row['is_rekomendasi_manual']);
                    unset($row['is_kategori_manual']);
                    // KEEP: kategori_kemiskinan, jumlah_tanggungan (needed for display)
                } elseif ($currentUser['role'] === 'kontributor' || $currentUser['role'] === 'guest') {
                    $row['anggota'] = [];
                    unset($row['no_kk']);
                    unset($row['nik']);
                    unset($row['penghasilan_bulanan']);
                    unset($row['pekerjaan']);
                    unset($row['status_pekerjaan']);
                    unset($row['luas_rumah']);
                    unset($row['jenis_lantai']);
                    unset($row['jenis_dinding']);
                    unset($row['sumber_air']);
                    unset($row['status_tempat_tinggal']);
                    unset($row['keterangan']);
                    unset($row['skor_kepercayaan']);
                    unset($row['is_rekomendasi_manual']);
                    unset($row['is_kategori_manual']);
                    unset($row['created_at']);
                    unset($row['updated_at']);
                    // KEEP: kategori_kemiskinan, jumlah_tanggungan, nama_kepala_keluarga (needed for display)
                } else {
                    $resA = $conn->query("SELECT * FROM anggota_keluarga WHERE rumah_warga_id=$id ORDER BY tanggal_lahir ASC");
                    $anggota = [];
                    while ($a = $resA->fetch_assoc()) $anggota[] = $a;
                    $row['anggota'] = $anggota;
                }
                echo json_encode(['success' => true, 'data' => $row]);
            } else {
                echo json_encode(['success' => false, 'message' => 'Data tidak ditemukan']);
            }
            break;
        }

        // Filter pencarian
        $where = [];
        if (!empty($_GET['kategori']))    $where[] = "kategori_kemiskinan = '" . $conn->real_escape_string($_GET['kategori']) . "'";
        if (!empty($_GET['status']))      $where[] = "status_bantuan = '" . $conn->real_escape_string($_GET['status']) . "'";
        if (!empty($_GET['rekomendasi'])) $where[] = "rekomendasi_bantuan = '" . $conn->real_escape_string($_GET['rekomendasi']) . "'";
        if (!empty($_GET['kecamatan']))   $where[] = "kecamatan LIKE '%" . $conn->real_escape_string($_GET['kecamatan']) . "%'";
        if (!empty($_GET['kelurahan']))   $where[] = "kelurahan LIKE '%" . $conn->real_escape_string($_GET['kelurahan']) . "%'";
        if (!empty($_GET['search']))      $where[] = "(nama_kepala_keluarga LIKE '%" . $conn->real_escape_string($_GET['search']) . "%' OR no_kk LIKE '%" . $conn->real_escape_string($_GET['search']) . "%' OR nik LIKE '%" . $conn->real_escape_string($_GET['search']) . "%')";

        // Filter wilayah untuk koordinator tidak lagi dibatasi per kelurahan/kecamatan di SQL,
        // melainkan akan difilter secara dinamis berdasarkan radius geografis di frontend.

        $sql    = "SELECT * FROM rumah_warga" . ($where ? " WHERE " . implode(' AND ', $where) : "") . " ORDER BY nama_kepala_keluarga ASC";
        $result = $conn->query($sql);
        if ($result === false) {
            echo json_encode([
                'success' => false,
                'message' => 'Gagal mengambil data dari tabel "rumah_warga": ' . $conn->error
            ]);
            break;
        }
        $data   = [];
        while ($row = $result->fetch_assoc()) {
            if ($currentUser['role'] === 'koordinator') {
                unset($row['no_kk']);
                unset($row['nik']);
                unset($row['penghasilan_bulanan']);
                unset($row['pekerjaan']);
                unset($row['status_pekerjaan']);
                unset($row['luas_rumah']);
                unset($row['jenis_lantai']);
                unset($row['jenis_dinding']);
                unset($row['sumber_air']);
                unset($row['status_tempat_tinggal']);
                unset($row['keterangan']);
                unset($row['skor_kepercayaan']);
                unset($row['is_rekomendasi_manual']);
                // KEEP: kategori_kemiskinan, jumlah_tanggungan (needed for frontend display)
            } elseif ($currentUser['role'] === 'kontributor' || $currentUser['role'] === 'guest') {
                unset($row['no_kk']);
                unset($row['nik']);
                unset($row['penghasilan_bulanan']);
                unset($row['pekerjaan']);
                unset($row['status_pekerjaan']);
                unset($row['luas_rumah']);
                unset($row['jenis_lantai']);
                unset($row['jenis_dinding']);
                unset($row['sumber_air']);
                unset($row['status_tempat_tinggal']);
                unset($row['keterangan']);
                unset($row['skor_kepercayaan']);
                unset($row['is_rekomendasi_manual']);
                unset($row['created_at']);
                unset($row['updated_at']);
                // KEEP: kategori_kemiskinan, jumlah_tanggungan, nama_kepala_keluarga (needed for frontend display)
            }
            $data[] = $row;
        }
        echo json_encode(['success' => true, 'data' => $data, 'total' => count($data)]);
        break;

    // ── POST ─────────────────────────────────────────────────────────────────
    case 'POST':
        // Membatasi akses: Hanya Admin dan Petugas Lapangan yang bisa menginput
        requireAuth(['admin', 'petugas']);

        $input = json_decode(file_get_contents('php://input'), true) ?: $_POST;

        $no_kk      = $conn->real_escape_string(trim($input['no_kk'] ?? ''));
        $nama       = $conn->real_escape_string(trim($input['nama_kepala_keluarga'] ?? ''));
        $nik        = $conn->real_escape_string($input['nik'] ?? '');
        $alamat     = $conn->real_escape_string($input['alamat'] ?? '');
        $kelurahan  = $conn->real_escape_string($input['kelurahan'] ?? '');
        $kecamatan  = $conn->real_escape_string($input['kecamatan'] ?? '');
        $kota       = $conn->real_escape_string($input['kota'] ?? '');
        $lat        = (float)($input['latitude'] ?? 0);
        $lng        = (float)($input['longitude'] ?? 0);
        $tanggungan = (int)($input['jumlah_tanggungan'] ?? 1);
        $penghasilan= (float)($input['penghasilan_bulanan'] ?? 0);
        $pekerjaan  = $conn->real_escape_string($input['pekerjaan'] ?? '');
        $stsPekerjaan = $conn->real_escape_string($input['status_pekerjaan'] ?? 'tidak_bekerja');
        $luas       = !empty($input['luas_rumah']) ? (float)$input['luas_rumah'] : 'NULL';
        $lantai     = $conn->real_escape_string($input['jenis_lantai'] ?? 'semen');
        $dinding    = $conn->real_escape_string($input['jenis_dinding'] ?? 'tembok');
        $air        = $conn->real_escape_string($input['sumber_air'] ?? 'sumur');
        $tinggal    = $conn->real_escape_string($input['status_tempat_tinggal'] ?? 'milik_sendiri');
        $kategoriInput = $conn->real_escape_string($input['kategori_kemiskinan'] ?? 'miskin');
        $isKatManual = ($kategoriInput !== 'sistem') ? 1 : 0;
        $kategori = ($isKatManual === 1) ? $kategoriInput : hitungKategoriKesejahteraan($penghasilan, $tanggungan, $tinggal, $air);

        $stsbansos  = $conn->real_escape_string($input['status_bantuan'] ?? 'belum_terima');
        $ket        = $conn->real_escape_string($input['keterangan'] ?? '');
        $dikelola   = !empty($input['dikelola_oleh_ibadah_id']) ? (int)$input['dikelola_oleh_ibadah_id'] : 'NULL';

        // Validasi
        if (!$nama || !$lat || !$lng) {
            echo json_encode(['success' => false, 'message' => 'Nama KK, latitude, dan longitude wajib diisi']); break;
        }
        if (!$no_kk || strlen(preg_replace('/\D/', '', $no_kk)) !== 16) {
            echo json_encode(['success' => false, 'message' => 'Nomor KK harus 16 digit angka']); break;
        }
        // Cek duplikat KK
        $cek = $conn->query("SELECT id FROM rumah_warga WHERE no_kk='$no_kk'");
        if ($cek->num_rows > 0) {
            echo json_encode(['success' => false, 'message' => 'Nomor KK sudah terdaftar']); break;
        }

        $luasVal = is_numeric($luas) ? $luas : 'NULL';
        $rekInput = $conn->real_escape_string($input['rekomendasi_bantuan'] ?? 'sistem');
        $isManual = ($rekInput !== 'sistem') ? 1 : 0;

        $sql = "INSERT INTO rumah_warga
                  (no_kk,nama_kepala_keluarga,nik,alamat,kelurahan,kecamatan,kota,latitude,longitude,
                   jumlah_tanggungan,penghasilan_bulanan,pekerjaan,status_pekerjaan,
                   luas_rumah,jenis_lantai,jenis_dinding,sumber_air,status_tempat_tinggal,
                   kategori_kemiskinan,is_kategori_manual,status_bantuan,rekomendasi_bantuan,is_rekomendasi_manual,keterangan,
                   dikelola_oleh_ibadah_id, tanggal_verifikasi, skor_kepercayaan, status_verifikasi)
                VALUES
                  ('$no_kk','$nama','$nik','$alamat','$kelurahan','$kecamatan','$kota',$lat,$lng,
                   $tanggungan,$penghasilan,'$pekerjaan','$stsPekerjaan',
                   $luasVal,'$lantai','$dinding','$air','$tinggal',
                   '$kategori',$isKatManual,'$stsbansos','bantuan_rutin',$isManual,'$ket',
                   $dikelola, CURRENT_DATE(), 100, 'terverifikasi')";

        if ($conn->query($sql)) {
            $newId = $conn->insert_id;

            // Simpan anggota jika ada
            if (!empty($input['anggota']) && is_array($input['anggota'])) {
                simpanAnggota($conn, $newId, $input['anggota']);
            }

            // Hitung rekomendasi otomatis
            if ($isManual === 1) {
                $rek = $rekInput;
            } else {
                $rek = hitungRekomendasi($conn, $newId, $penghasilan, $stsPekerjaan);
            }
            $conn->query("UPDATE rumah_warga SET rekomendasi_bantuan='$rek' WHERE id=$newId");

            echo json_encode(['success' => true, 'message' => 'Data berhasil disimpan', 'id' => $newId, 'rekomendasi' => $rek]);
        } else {
            echo json_encode(['success' => false, 'message' => 'Gagal menyimpan: ' . $conn->error]);
        }
        break;

    // ── PUT ──────────────────────────────────────────────────────────────────
    case 'PUT':
        // Membatasi akses: Admin, Petugas Lapangan, dan Koordinator Rumah Ibadah
        $currentUser = requireAuth(['admin', 'petugas', 'koordinator']);

        $input = json_decode(file_get_contents('php://input'), true);
        $id         = (int)($input['id'] ?? 0);
        if (!$id) { echo json_encode(['success' => false, 'message' => 'ID tidak valid']); break; }

        if ($currentUser['role'] === 'koordinator') {
            $stsbansos  = $conn->real_escape_string($input['status_bantuan'] ?? 'belum_terima');

            // Cek apakah warga berada di wilayah tugas koordinator (radius / kelurahan / kecamatan)
            $koorIbadahId = (int)$currentUser['rumah_ibadah_id'];
            $wargaRes = $conn->query("SELECT latitude, longitude, kelurahan, kecamatan FROM rumah_warga WHERE id = $id");
            if ($wargaRow = $wargaRes->fetch_assoc()) {
                $lat = (float)($wargaRow['latitude'] ?? 0);
                $lng = (float)($wargaRow['longitude'] ?? 0);
                $kelurahan = $wargaRow['kelurahan'] ?? '';
                $kecamatan = $wargaRow['kecamatan'] ?? '';
                if (!checkCoordinatorAccess($conn, $koorIbadahId, $lat, $lng, $kelurahan, $kecamatan)) {
                    http_response_code(403);
                    echo json_encode(['success' => false, 'message' => 'Forbidden: Warga di luar wilayah tugas Anda.']);
                    exit;
                }
            } else {
                echo json_encode(['success' => false, 'message' => 'Warga tidak ditemukan.']);
                exit;
            }

            $sql = "UPDATE rumah_warga SET status_bantuan='$stsbansos' WHERE id=$id";
            if ($conn->query($sql)) {
                echo json_encode(['success' => true, 'message' => 'Status bantuan warga berhasil diperbarui']);
            } else {
                echo json_encode(['success' => false, 'message' => 'Gagal memperbarui status bantuan: ' . $conn->error]);
            }
            break;
        }

        $no_kk      = $conn->real_escape_string(trim($input['no_kk'] ?? ''));
        $nama       = $conn->real_escape_string(trim($input['nama_kepala_keluarga'] ?? ''));
        $nik        = $conn->real_escape_string($input['nik'] ?? '');
        $alamat     = $conn->real_escape_string($input['alamat'] ?? '');
        $kelurahan  = $conn->real_escape_string($input['kelurahan'] ?? '');
        $kecamatan  = $conn->real_escape_string($input['kecamatan'] ?? '');
        $kota       = $conn->real_escape_string($input['kota'] ?? '');
        $lat        = (float)($input['latitude'] ?? 0);
        $lng        = (float)($input['longitude'] ?? 0);
        $tanggungan = (int)($input['jumlah_tanggungan'] ?? 1);
        $penghasilan= (float)($input['penghasilan_bulanan'] ?? 0);
        $pekerjaan  = $conn->real_escape_string($input['pekerjaan'] ?? '');
        $stsPekerjaan = $conn->real_escape_string($input['status_pekerjaan'] ?? 'tidak_bekerja');
        $luasVal    = !empty($input['luas_rumah']) ? (float)$input['luas_rumah'] : 'NULL';
        $lantai     = $conn->real_escape_string($input['jenis_lantai'] ?? 'semen');
        $dinding    = $conn->real_escape_string($input['jenis_dinding'] ?? 'tembok');
        $air        = $conn->real_escape_string($input['sumber_air'] ?? 'sumur');
        $tinggal    = $conn->real_escape_string($input['status_tempat_tinggal'] ?? 'milik_sendiri');
        $kategoriInput = $conn->real_escape_string($input['kategori_kemiskinan'] ?? 'miskin');
        $isKatManual = ($kategoriInput !== 'sistem') ? 1 : 0;
        $kategori = ($isKatManual === 1) ? $kategoriInput : hitungKategoriKesejahteraan($penghasilan, $tanggungan, $tinggal, $air);

        $stsbansos  = $conn->real_escape_string($input['status_bantuan'] ?? 'belum_terima');
        $rekInput   = $conn->real_escape_string($input['rekomendasi_bantuan'] ?? 'sistem');
        $isManual   = ($rekInput !== 'sistem') ? 1 : 0;
        $ket        = $conn->real_escape_string($input['keterangan'] ?? '');
        $dikelola   = isset($input['dikelola_oleh_ibadah_id']) && $input['dikelola_oleh_ibadah_id'] !== '' ? (int)$input['dikelola_oleh_ibadah_id'] : 'NULL';

        // Cek duplikat KK (kecuali diri sendiri)
        $cek = $conn->query("SELECT id FROM rumah_warga WHERE no_kk='$no_kk' AND id != $id");
        if ($cek->num_rows > 0) {
            echo json_encode(['success' => false, 'message' => 'Nomor KK sudah digunakan data lain']); break;
        }

        // Update anggota jika ada
        if (!empty($input['anggota']) && is_array($input['anggota'])) {
            $conn->query("DELETE FROM anggota_keluarga WHERE rumah_warga_id=$id");
            simpanAnggota($conn, $id, $input['anggota']);
        }

        // Hitung rekomendasi otomatis
        if ($isManual === 1) {
            $rek = $rekInput;
        } else {
            $rek = hitungRekomendasi($conn, $id, $penghasilan, $stsPekerjaan);
        }

        $sql = "UPDATE rumah_warga SET
                  no_kk='$no_kk', nama_kepala_keluarga='$nama', nik='$nik',
                  alamat='$alamat', kelurahan='$kelurahan', kecamatan='$kecamatan', kota='$kota',
                  latitude=$lat, longitude=$lng,
                  jumlah_tanggungan=$tanggungan, penghasilan_bulanan=$penghasilan,
                  pekerjaan='$pekerjaan', status_pekerjaan='$stsPekerjaan',
                  luas_rumah=$luasVal, jenis_lantai='$lantai', jenis_dinding='$dinding',
                  sumber_air='$air', status_tempat_tinggal='$tinggal',
                  kategori_kemiskinan='$kategori', is_kategori_manual=$isKatManual, status_bantuan='$stsbansos',
                  rekomendasi_bantuan='$rek', is_rekomendasi_manual=$isManual, keterangan='$ket',
                  dikelola_oleh_ibadah_id=$dikelola
                WHERE id=$id";

        if ($conn->query($sql)) {
            echo json_encode(['success' => true, 'message' => 'Data berhasil diperbarui', 'rekomendasi' => $rek]);
        } else {
            echo json_encode(['success' => false, 'message' => 'Gagal memperbarui: ' . $conn->error]);
        }
        break;

    // ── DELETE ───────────────────────────────────────────────────────────────
    case 'DELETE':
        // Membatasi akses: HANYA Admin yang boleh menghapus data warga
        requireAuth(['admin']);

        $id = (int)($_GET['id'] ?? 0);
        if (!$id) {
            $input = json_decode(file_get_contents('php://input'), true);
            $id    = (int)($input['id'] ?? 0);
        }
        if ($conn->query("DELETE FROM rumah_warga WHERE id=$id")) {
            echo json_encode(['success' => true, 'message' => 'Data berhasil dihapus']);
        } else {
            echo json_encode(['success' => false, 'message' => 'Gagal menghapus: ' . $conn->error]);
        }
        break;

    default:
        http_response_code(405);
        echo json_encode(['error' => 'Method not allowed']);
}
$conn->close();

// ════════════════════════════════════════════════════════════════════════════
function simpanAnggota(mysqli $conn, int $wargaId, array $list): void
{
    foreach ($list as $a) {
        $nama  = $conn->real_escape_string(trim($a['nama'] ?? ''));
        if (!$nama) continue;
        $nik   = $conn->real_escape_string($a['nik'] ?? '');
        $tl    = !empty($a['tanggal_lahir']) ? "'" . $conn->real_escape_string($a['tanggal_lahir']) . "'" : 'NULL';
        $jk    = $conn->real_escape_string($a['jenis_kelamin'] ?? 'laki_laki');
        $pend  = $conn->real_escape_string($a['pendidikan'] ?? 'sd');
        $pek   = $conn->real_escape_string($a['pekerjaan'] ?? '');
        $stsBk = $conn->real_escape_string($a['status_bekerja'] ?? 'tidak_bekerja');
        $kes   = $conn->real_escape_string($a['kondisi_kesehatan'] ?? 'sehat');
        $bisa  = (int)($a['dapat_bekerja'] ?? 1);

        $conn->query("INSERT INTO anggota_keluarga (rumah_warga_id,nama,nik,tanggal_lahir,jenis_kelamin,pendidikan,pekerjaan,status_bekerja,kondisi_kesehatan,dapat_bekerja)
                      VALUES ($wargaId,'$nama','$nik',$tl,'$jk','$pend','$pek','$stsBk','$kes',$bisa)");
    }
}