<?php
require_once 'db_pdo.php';
require_once 'haversine_helper.php';
require_once 'penduduk_feature_helper.php';
require_once 'auth.php';
require_admin_login(true);
header('Content-Type: application/json');

$input = readPendudukInput();

if (!$input) {
    echo json_encode(['success' => false, 'message' => 'Input tidak valid']);
    exit;
}

try {
    ensurePendudukDistanceColumns($pdo);
    ensurePendudukFeatureSchema($pdo);

    $input_lat = floatval($input['lat']);
    $input_lng = floatval($input['lng']);
    $coverage = calculatePendudukCoverage($pdo, $input_lat, $input_lng);
    $buktiFile = saveUploadedEvidence('bukti_file');

    $stmt = $pdo->prepare("
        INSERT INTO penduduk_miskin 
        (kk_nama, kk_nik, alamat, lat, lng, ibadah_id, jarak_m, jarak_rute_m, is_blank_spot, status_bantuan, kategori_kebutuhan, deskripsi_kebutuhan, tindak_lanjut, kondisi_rumah, penghasilan, catatan_survei, bukti_file, jenis_bantuan, tanggal_bantuan) 
        VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
    ");
    $stmt->execute([
        $input['kk_nama'],
        $input['kk_nik'] ?? null,
        $input['alamat'],
        $input['lat'],
        $input['lng'],
        $coverage['ibadah_id'],
        $coverage['jarak_m'],
        $coverage['jarak_rute_m'],
        $coverage['is_blank_spot'],
        $input['status_bantuan'] ?? 'Belum dibantu',
        $input['kategori_kebutuhan'] ?? null,
        $input['deskripsi_kebutuhan'] ?? null,
        $input['tindak_lanjut'] ?? 'Belum disurvei',
        $input['kondisi_rumah'] ?? null,
        normalizeNonNegativeIntOrNull($input['penghasilan'] ?? '', 'Penghasilan'),
        $input['catatan_survei'] ?? null,
        $buktiFile,
        $input['jenis_bantuan'] ?? null,
        normalizeDateOrNull($input['tanggal_bantuan'] ?? null)
    ]);
    
    $penduduk_id = $pdo->lastInsertId();

    // 4. Insert anggota keluarga if exist
    if (!empty($input['anggota']) && is_array($input['anggota'])) {
        $stmtAnggota = $pdo->prepare("INSERT INTO anggota_keluarga (penduduk_id, nama, hubungan, umur, pekerjaan) VALUES (?, ?, ?, ?, ?)");
        foreach ($input['anggota'] as $anggota) {
            $stmtAnggota->execute([
                $penduduk_id,
                $anggota['nama'],
                $anggota['hubungan'],
                $anggota['umur'] ?? null,
                $anggota['pekerjaan'] ?? null
            ]);
        }
    }

    if (($input['status_bantuan'] ?? '') === 'Sudah dibantu' && !empty($input['jenis_bantuan'])) {
        $stmtRiwayat = $pdo->prepare("
            INSERT INTO riwayat_bantuan (penduduk_id, jenis_bantuan, tanggal_bantuan, pemberi_bantuan, catatan, bukti_file)
            VALUES (?, ?, ?, ?, ?, ?)
        ");
        $stmtRiwayat->execute([
            $penduduk_id,
            $input['jenis_bantuan'],
            normalizeDateOrNull($input['tanggal_bantuan'] ?? null) ?? date('Y-m-d'),
            'Admin',
            'Dicatat dari form penduduk.',
            $buktiFile,
        ]);
    }

    updatePendudukPriority($pdo, (int)$penduduk_id);

    echo json_encode([
        'success' => true, 
        'id' => $penduduk_id, 
        'ibadah_id' => $coverage['ibadah_id'],
        'jarak_m' => $coverage['jarak_m'],
        'jarak_rute_m' => $coverage['jarak_rute_m'],
        'is_blank_spot' => $coverage['is_blank_spot']
    ]);
} catch (Exception $e) {
    echo json_encode(['success' => false, 'message' => $e->getMessage()]);
}
