<?php
// api/anggota_keluarga.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';

$method = $_SERVER['REQUEST_METHOD'];

switch ($method) {
    case 'GET':
        require_once 'middleware.php';
        $currentUser = requireAuth(['admin', 'petugas', 'koordinator']);
        if ($currentUser['role'] === 'koordinator') {
            echo json_encode(['success' => true, 'data' => [], 'total' => 0]);
            break;
        }

        $wargaId = (int)($_GET['rumah_warga_id'] ?? 0);
        if (!$wargaId) { echo json_encode(['success' => false, 'message' => 'rumah_warga_id diperlukan']); break; }

        $res  = $conn->query("SELECT * FROM anggota_keluarga WHERE rumah_warga_id=$wargaId ORDER BY tanggal_lahir ASC");
        $data = [];
        $today = new DateTime();
        while ($row = $res->fetch_assoc()) {
            // Hitung usia
            if ($row['tanggal_lahir']) {
                $lahir = new DateTime($row['tanggal_lahir']);
                $row['usia'] = (int)$today->diff($lahir)->y;
            } else {
                $row['usia'] = null;
            }
            $data[] = $row;
        }
        echo json_encode(['success' => true, 'data' => $data, 'total' => count($data)]);
        break;

    case 'POST':
        $input      = json_decode(file_get_contents('php://input'), true) ?: $_POST;
        $wargaId    = (int)($input['rumah_warga_id'] ?? 0);
        $nama       = $conn->real_escape_string(trim($input['nama'] ?? ''));
        $nik        = $conn->real_escape_string($input['nik'] ?? '');
        $tl         = !empty($input['tanggal_lahir']) ? "'" . $conn->real_escape_string($input['tanggal_lahir']) . "'" : 'NULL';
        $jk         = $conn->real_escape_string($input['jenis_kelamin'] ?? 'laki_laki');
        $pend       = $conn->real_escape_string($input['pendidikan'] ?? 'sd');
        $pek        = $conn->real_escape_string($input['pekerjaan'] ?? '');
        $stsBk      = $conn->real_escape_string($input['status_bekerja'] ?? 'tidak_bekerja');
        $kes        = $conn->real_escape_string($input['kondisi_kesehatan'] ?? 'sehat');
        $bisa       = (int)($input['dapat_bekerja'] ?? 1);

        if (!$wargaId || !$nama) { echo json_encode(['success' => false, 'message' => 'ID warga dan nama wajib diisi']); break; }

        $sql = "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)";

        if ($conn->query($sql)) {
            // Re-hitung rekomendasi induk
            rehitungRekomendasi($conn, $wargaId);
            echo json_encode(['success' => true, 'message' => 'Anggota berhasil ditambahkan', 'id' => $conn->insert_id]);
        } else {
            echo json_encode(['success' => false, 'message' => 'Gagal: ' . $conn->error]);
        }
        break;

    case 'PUT':
        $input   = json_decode(file_get_contents('php://input'), true);
        $id      = (int)($input['id'] ?? 0);
        $nama    = $conn->real_escape_string(trim($input['nama'] ?? ''));
        $nik     = $conn->real_escape_string($input['nik'] ?? '');
        $tl      = !empty($input['tanggal_lahir']) ? "'" . $conn->real_escape_string($input['tanggal_lahir']) . "'" : 'NULL';
        $jk      = $conn->real_escape_string($input['jenis_kelamin'] ?? 'laki_laki');
        $pend    = $conn->real_escape_string($input['pendidikan'] ?? 'sd');
        $pek     = $conn->real_escape_string($input['pekerjaan'] ?? '');
        $stsBk   = $conn->real_escape_string($input['status_bekerja'] ?? 'tidak_bekerja');
        $kes     = $conn->real_escape_string($input['kondisi_kesehatan'] ?? 'sehat');
        $bisa    = (int)($input['dapat_bekerja'] ?? 1);

        if (!$id) { echo json_encode(['success' => false, 'message' => 'ID tidak valid']); break; }

        $sql = "UPDATE anggota_keluarga SET
                  nama='$nama', nik='$nik', tanggal_lahir=$tl, jenis_kelamin='$jk',
                  pendidikan='$pend', pekerjaan='$pek', status_bekerja='$stsBk',
                  kondisi_kesehatan='$kes', dapat_bekerja=$bisa
                WHERE id=$id";

        if ($conn->query($sql)) {
            // Ambil warga_id lalu re-hitung rekomendasi
            $r = $conn->query("SELECT rumah_warga_id FROM anggota_keluarga WHERE id=$id");
            if ($row = $r->fetch_assoc()) rehitungRekomendasi($conn, (int)$row['rumah_warga_id']);
            echo json_encode(['success' => true, 'message' => 'Anggota berhasil diperbarui']);
        } else {
            echo json_encode(['success' => false, 'message' => 'Gagal: ' . $conn->error]);
        }
        break;

    case 'DELETE':
        $id = (int)($_GET['id'] ?? 0);
        if (!$id) { $input = json_decode(file_get_contents('php://input'), true); $id = (int)($input['id'] ?? 0); }

        // Ambil warga_id sebelum hapus
        $r       = $conn->query("SELECT rumah_warga_id FROM anggota_keluarga WHERE id=$id");
        $wargaId = ($row = $r->fetch_assoc()) ? (int)$row['rumah_warga_id'] : 0;

        if ($conn->query("DELETE FROM anggota_keluarga WHERE id=$id")) {
            if ($wargaId) rehitungRekomendasi($conn, $wargaId);
            echo json_encode(['success' => true, 'message' => 'Anggota berhasil dihapus']);
        } else {
            echo json_encode(['success' => false, 'message' => 'Gagal: ' . $conn->error]);
        }
        break;

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

// ── Helper: re-hitung & simpan rekomendasi ────────────────────────────────
function rehitungRekomendasi(mysqli $conn, int $wargaId): void
{
    $res      = $conn->query("SELECT penghasilan_bulanan, status_pekerjaan, is_rekomendasi_manual FROM rumah_warga WHERE id=$wargaId");
    if (!($row = $res->fetch_assoc())) return;
    if (isset($row['is_rekomendasi_manual']) && (int)$row['is_rekomendasi_manual'] === 1) return;

    $penghasilan  = (float)$row['penghasilan_bulanan'];
    $stsPekerjaan = $row['status_pekerjaan'];

    $today = new DateTime();
    $resA  = $conn->query("SELECT tanggal_lahir, status_bekerja, dapat_bekerja, kondisi_kesehatan FROM anggota_keluarga WHERE rumah_warga_id=$wargaId");
    $anggota = [];
    while ($a = $resA->fetch_assoc()) $anggota[] = $a;

    $adaProduktif          = false;
    $adaProduktifBisaKerja = false;
    $semuaProduktifTakBisa = true;

    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;
            if ($bisaKerja && $a['status_bekerja'] !== 'bekerja') $adaProduktifBisaKerja = true;
        }
    }

    $perluRutin     = !$adaProduktif || ($adaProduktif && $semuaProduktifTakBisa) || $penghasilan < 500000 || $stsPekerjaan === 'tidak_bekerja';
    $perluPelatihan = $adaProduktifBisaKerja;

    $rek = 'tidak_ada';
    if ($perluRutin && $perluPelatihan) $rek = 'keduanya';
    elseif ($perluRutin)                $rek = 'bantuan_rutin';
    elseif ($perluPelatihan)            $rek = 'bantuan_pelatihan';

    $conn->query("UPDATE rumah_warga SET rekomendasi_bantuan='$rek' WHERE id=$wargaId");
}