<?php
// api/anggota.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(200); exit; }

require_once '../includes/config.php';
$method = $_SERVER['REQUEST_METHOD'];
$action = $_GET['action'] ?? 'list';

// ── GET ───────────────────────────────────────────────────
if ($method === 'GET') {
    if ($action === 'list' && isset($_GET['id_penduduk'])) {
        $pid = (int)$_GET['id_penduduk'];
        $res = $conn->query("SELECT *,
            TIMESTAMPDIFF(YEAR, tanggal_lahir, CURDATE()) AS umur,
            CASE
                WHEN TIMESTAMPDIFF(YEAR,tanggal_lahir,CURDATE()) < 6  THEN 'Balita'
                WHEN TIMESTAMPDIFF(YEAR,tanggal_lahir,CURDATE()) < 13 THEN 'Anak-anak'
                WHEN TIMESTAMPDIFF(YEAR,tanggal_lahir,CURDATE()) < 18 THEN 'Remaja'
                WHEN TIMESTAMPDIFF(YEAR,tanggal_lahir,CURDATE()) < 60 THEN 'Dewasa'
                ELSE 'Lansia'
            END AS kelompok_usia
            FROM anggota_keluarga WHERE id_penduduk=$pid ORDER BY id");
        $data = [];
        while ($r = $res->fetch_assoc()) {
            // Tambahkan riwayat pendidikan tiap anggota
            $pend = $conn->query("SELECT * FROM riwayat_pendidikan WHERE id_anggota={$r['id']} ORDER BY tahun_masuk DESC");
            $pendList = [];
            while ($p = $pend->fetch_assoc()) $pendList[] = $p;
            $r['riwayat_pendidikan'] = $pendList;
            $data[] = $r;
        }
        jsonResponse($data);

    } elseif ($action === 'get' && isset($_GET['id'])) {
        $id  = (int)$_GET['id'];
        $row = $conn->query("SELECT *,
            TIMESTAMPDIFF(YEAR,tanggal_lahir,CURDATE()) AS umur
            FROM anggota_keluarga WHERE id=$id")->fetch_assoc();
        if ($row) {
            $pend = $conn->query("SELECT * FROM riwayat_pendidikan WHERE id_anggota=$id ORDER BY tahun_masuk DESC");
            $pendList = [];
            while ($p = $pend->fetch_assoc()) $pendList[] = $p;
            $row['riwayat_pendidikan'] = $pendList;
        }
        jsonResponse($row ?: ['error'=>'Tidak ditemukan']);

    } elseif ($action === 'statistik_usia') {
        // Distribusi usia seluruh anggota keluarga
        $res = $conn->query("SELECT
            COUNT(*) AS total,
            SUM(CASE WHEN TIMESTAMPDIFF(YEAR,tanggal_lahir,CURDATE()) < 6 THEN 1 ELSE 0 END) AS balita,
            SUM(CASE WHEN TIMESTAMPDIFF(YEAR,tanggal_lahir,CURDATE()) BETWEEN 6 AND 12 THEN 1 ELSE 0 END) AS anak,
            SUM(CASE WHEN TIMESTAMPDIFF(YEAR,tanggal_lahir,CURDATE()) BETWEEN 13 AND 17 THEN 1 ELSE 0 END) AS remaja,
            SUM(CASE WHEN TIMESTAMPDIFF(YEAR,tanggal_lahir,CURDATE()) BETWEEN 18 AND 59 THEN 1 ELSE 0 END) AS dewasa,
            SUM(CASE WHEN TIMESTAMPDIFF(YEAR,tanggal_lahir,CURDATE()) >= 60 THEN 1 ELSE 0 END) AS lansia
            FROM anggota_keluarga WHERE status_hidup='hidup'");
        jsonResponse($res->fetch_assoc());

    } elseif ($action === 'statistik_pendidikan') {
        $res = $conn->query("SELECT rp.jenjang, COUNT(*) AS jumlah
            FROM riwayat_pendidikan rp
            JOIN anggota_keluarga ak ON rp.id_anggota=ak.id
            WHERE rp.status_pendidikan='lulus' OR rp.status_pendidikan='putus_sekolah'
            GROUP BY rp.jenjang ORDER BY jumlah DESC");
        $data=[];
        while($r=$res->fetch_assoc())$data[]=$r;
        jsonResponse($data);
    }
}

// ── POST: tambah anggota ──────────────────────────────────
if ($method === 'POST') {
    requireLogin(['admin','pengurus_ibadah','masyarakat']);
    $d          = json_decode(file_get_contents('php://input'), true) ?: $_POST;
    $id_penduduk= (int)($d['id_penduduk']??0);
    $nik        = esc($conn,$d['nik']??'');
    $nama       = esc($conn,$d['nama']??'');
    $hub        = esc($conn,$d['hubungan']??'Anak');
    $jk         = esc($conn,$d['jenis_kelamin']??'L');
    $tgl        = esc($conn,$d['tanggal_lahir']??'2000-01-01');
    $tmp        = esc($conn,$d['tempat_lahir']??'');
    $agm        = esc($conn,$d['agama']??'Islam');
    $pkj        = esc($conn,$d['pekerjaan']??'');
    $hp         = esc($conn,$d['no_hp']??'');

    if (!$id_penduduk || !$nama)
        jsonResponse(['success'=>false,'error'=>'ID penduduk dan nama wajib diisi'],400);

    $sql = "INSERT INTO anggota_keluarga
            (id_penduduk,nik,nama,hubungan,jenis_kelamin,tanggal_lahir,tempat_lahir,agama,pekerjaan,no_hp)
            VALUES ($id_penduduk,'$nik','$nama','$hub','$jk','$tgl','$tmp','$agm','$pkj','$hp')";

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

        // Tambah riwayat pendidikan jika ada
        $pendList = $d['riwayat_pendidikan'] ?? [];
        foreach ($pendList as $pd) {
            $jj = esc($conn,$pd['jenjang']??'');
            $ni = esc($conn,$pd['nama_institusi']??'');
            $jur= esc($conn,$pd['jurusan']??'');
            $tm = (int)($pd['tahun_masuk']??0)?:'NULL';
            $tl = (int)($pd['tahun_lulus']??0)?:'NULL';
            $sp = esc($conn,$pd['status_pendidikan']??'lulus');
            $ket= esc($conn,$pd['keterangan']??'');
            if ($jj) {
                $conn->query("INSERT INTO riwayat_pendidikan
                    (id_anggota,jenjang,nama_institusi,jurusan,tahun_masuk,tahun_lulus,status_pendidikan,keterangan)
                    VALUES ($aid,'$jj','$ni','$jur',$tm,$tl,'$sp','$ket')");
            }
        }

        // Update jumlah_anggota di KK
        $conn->query("UPDATE penduduk SET jumlah_anggota=(SELECT COUNT(*) FROM anggota_keluarga WHERE id_penduduk=$id_penduduk) WHERE id=$id_penduduk");

        logAktivitas($conn,'tambah_anggota','anggota_keluarga',$aid,"KK:$id_penduduk - $nama");
        jsonResponse(['success'=>true,'id'=>$aid,'message'=>'Anggota keluarga berhasil ditambahkan']);
    } else {
        jsonResponse(['success'=>false,'error'=>$conn->error],500);
    }
}

// ── PUT: update anggota / status hidup ───────────────────
if ($method === 'PUT') {
    requireLogin(['admin','pengurus_ibadah']);
    $d       = json_decode(file_get_contents('php://input'), true);
    $id      = (int)$d['id'];
    $action2 = $d['action'] ?? 'update';

    if ($action2 === 'status') {
        // Update status hidup saja (dari verifikasi laporan)
        $status = esc($conn,$d['status_hidup']??'hidup');
        $sql    = "UPDATE anggota_keluarga SET status_hidup='$status' WHERE id=$id";
        if ($conn->query($sql)) {
            logAktivitas($conn,'update_status_anggota','anggota_keluarga',$id,"Status: $status");
            jsonResponse(['success'=>true,'message'=>'Status diperbarui']);
        } else {
            jsonResponse(['success'=>false,'error'=>$conn->error],500);
        }
    } else {
        // Full update
        $nama = esc($conn,$d['nama']??'');
        $hub  = esc($conn,$d['hubungan']??'');
        $tgl  = esc($conn,$d['tanggal_lahir']??'');
        $agm  = esc($conn,$d['agama']??'');
        $pkj  = esc($conn,$d['pekerjaan']??'');
        $hp   = esc($conn,$d['no_hp']??'');
        $sh   = esc($conn,$d['status_hidup']??'hidup');

        $sql = "UPDATE anggota_keluarga SET nama='$nama',hubungan='$hub',tanggal_lahir='$tgl',
                agama='$agm',pekerjaan='$pkj',no_hp='$hp',status_hidup='$sh' WHERE id=$id";
        if ($conn->query($sql)) {
            // Update pendidikan jika ada
            if (!empty($d['riwayat_pendidikan'])) {
                $conn->query("DELETE FROM riwayat_pendidikan WHERE id_anggota=$id");
                foreach ($d['riwayat_pendidikan'] as $pd) {
                    $jj=$conn->real_escape_string($pd['jenjang']??'');
                    $ni=$conn->real_escape_string($pd['nama_institusi']??'');
                    $tm=(int)($pd['tahun_masuk']??0)?:'NULL';
                    $tl=(int)($pd['tahun_lulus']??0)?:'NULL';
                    $sp=$conn->real_escape_string($pd['status_pendidikan']??'lulus');
                    if($jj)$conn->query("INSERT INTO riwayat_pendidikan (id_anggota,jenjang,nama_institusi,tahun_masuk,tahun_lulus,status_pendidikan) VALUES ($id,'$jj','$ni',$tm,$tl,'$sp')");
                }
            }
            logAktivitas($conn,'edit_anggota','anggota_keluarga',$id,"Edit: $nama");
            jsonResponse(['success'=>true,'message'=>'Data anggota diperbarui']);
        } else {
            jsonResponse(['success'=>false,'error'=>$conn->error],500);
        }
    }
}

// ── DELETE ────────────────────────────────────────────────
if ($method === 'DELETE') {
    requireLogin(['admin','pengurus_ibadah']);
    $id = (int)($_GET['id']??0);
    $row = $conn->query("SELECT id_penduduk FROM anggota_keluarga WHERE id=$id")->fetch_assoc();
    if ($conn->query("DELETE FROM anggota_keluarga WHERE id=$id")) {
        if ($row) {
            $pid = (int)$row['id_penduduk'];
            $conn->query("UPDATE penduduk SET jumlah_anggota=(SELECT COUNT(*) FROM anggota_keluarga WHERE id_penduduk=$pid) WHERE id=$pid");
        }
        logAktivitas($conn,'hapus_anggota','anggota_keluarga',$id,'');
        jsonResponse(['success'=>true,'message'=>'Data dihapus']);
    } else {
        jsonResponse(['success'=>false,'error'=>$conn->error],500);
    }
}
?>
