<?php
// api/submit_data_tumbuh_kembang.php

session_start();
header('Content-Type: application/json'); // Pastikan respons selalu JSON

// Untuk debugging, TAMPILKAN SEMUA ERROR (Hapus atau ubah di produksi)
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

$response = ['status' => 'error', 'message' => ''];

// Sertakan file koneksi database
require_once 'db_connect.php'; // Pastikan path ini benar relatif dari submit_data_tumbuh_kembang.php

// --- 1. Pastikan User Sudah Login ---
if (!isset($_SESSION['user_id'])) {
    $response['message'] = 'Anda harus login untuk menyimpan data tumbuh kembang.';
    echo json_encode($response);
    exit();
}
$user_id = $_SESSION['user_id'];

// --- 2. Pastikan Metode Request adalah POST ---
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
    $response['message'] = 'Metode request tidak diizinkan.';
    echo json_encode($response);
    exit();
}

// --- 3. Ambil dan Validasi Input ---
$errors = []; // Array untuk menampung pesan error validasi

// Tanggal Pemeriksaan
$tanggalPeriksa = $_POST['tanggalPeriksa'] ?? '';
if (empty($tanggalPeriksa)) {
    $errors[] = 'Tanggal pemeriksaan harus diisi.';
} elseif (!strtotime($tanggalPeriksa)) {
    $errors[] = 'Format tanggal pemeriksaan tidak valid.';
}

// Usia (bulan)
$usiaBulan = $_POST['usiaBulan'] ?? '';
if (!filter_var($usiaBulan, FILTER_VALIDATE_INT) && $usiaBulan !== '0') {
    $errors[] = 'Usia (bulan) harus angka.';
} elseif ($usiaBulan < 0 || $usiaBulan > 240) { // Batas wajar usia anak (misal sampai 20 tahun = 240 bulan)
    $errors[] = 'Usia (bulan) harus angka non-negatif dan wajar (max 240).';
}

// Berat Badan (kg)
$beratBadan = $_POST['beratBadan'] ?? '';
$beratBadan = str_replace(',', '.', $beratBadan); // Mengatasi koma sebagai desimal
if (!filter_var($beratBadan, FILTER_VALIDATE_FLOAT) && $beratBadan !== '0') {
    $errors[] = 'Berat badan harus angka (boleh desimal).';
} elseif ($beratBadan < 0 || $beratBadan > 100) { // Batas wajar berat badan (misal max 100kg)
    $errors[] = 'Berat badan harus angka non-negatif dan wajar.';
}

// Tinggi Badan (cm)
$tinggiBadan = $_POST['tinggiBadan'] ?? '';
$tinggiBadan = str_replace(',', '.', $tinggiBadan); // Mengatasi koma sebagai desimal
if (!filter_var($tinggiBadan, FILTER_VALIDATE_FLOAT) && $tinggiBadan !== '0') {
    $errors[] = 'Tinggi badan harus angka (boleh desimal).';
} elseif ($tinggiBadan < 0 || $tinggiBadan > 200) { // Batas wajar tinggi badan (misal max 200cm)
    $errors[] = 'Tinggi badan harus angka non-negatif dan wajar.';
}

// Lingkar Kepala (cm) (Opsional)
$lingkarKepala = $_POST['lingkarKepala'] ?? '';
$lingkarKepala = str_replace(',', '.', $lingkarKepala); // Mengatasi koma sebagai desimal
if ($lingkarKepala === '') { // Jika kosong, set ke NULL untuk DB
    $lingkarKepala = null;
} elseif (!filter_var($lingkarKepala, FILTER_VALIDATE_FLOAT) && $lingkarKepala !== '0') {
    $errors[] = 'Lingkar kepala harus angka (boleh 0 atau desimal) atau kosong.';
} elseif ($lingkarKepala < 0 || ($lingkarKepala !== null && $lingkarKepala > 80)) { // Batas wajar (misal max 80cm)
    $errors[] = 'Lingkar kepala harus angka non-negatif dan wajar.';
}


// Jika ada error validasi, kirim respons error
if (!empty($errors)) {
    $response['message'] = implode('<br>', $errors); // Gabungkan semua pesan error
    echo json_encode($response);
    exit();
}

// --- 4. Proses Penyimpanan ke Database ---
try {
    $stmt = $pdo->prepare("
        INSERT INTO data_tumbuh_kembang (
            user_id, tanggal_periksa, usia_bulan, berat_badan,
            tinggi_badan, lingkar_kepala
        ) VALUES (
            :user_id, :tanggal_periksa, :usia_bulan, :berat_badan,
            :tinggi_badan, :lingkar_kepala
        )
    ");

    $stmt->bindParam(':user_id', $user_id, PDO::PARAM_INT);
    $stmt->bindParam(':tanggal_periksa', $tanggalPeriksa, PDO::PARAM_STR);
    $stmt->bindParam(':usia_bulan', $usiaBulan, PDO::PARAM_INT);
    $stmt->bindParam(':berat_badan', $beratBadan); // PDO akan mengurus konversi float/decimal
    $stmt->bindParam(':tinggi_badan', $tinggiBadan); // PDO akan mengurus konversi float/decimal
    
    // Binding untuk lingkar_kepala
    if ($lingkarKepala === null) {
        $stmt->bindParam(':lingkar_kepala', $lingkarKepala, PDO::PARAM_NULL);
    } else {
        $stmt->bindParam(':lingkar_kepala', $lingkarKepala); // PDO akan mengurus konversi float/decimal
    }

    if ($stmt->execute()) {
        $response['status'] = 'success';
        $response['message'] = 'Data tumbuh kembang berhasil disimpan.';
    } else {
        $response['message'] = 'Gagal menyimpan data tumbuh kembang ke database.';
    }

} catch (PDOException $e) {
    error_log("Error saving growth data: " . $e->getMessage(), 0);
    $response['message'] = 'Terjadi kesalahan sistem: ' . $e->getMessage();
} catch (Exception $e) {
    error_log("General error in submit_data_tumbuh_kembang.php: " . $e->getMessage(), 0);
    $response['message'] = 'Terjadi kesalahan tidak terduga saat memproses data.';
}

// --- 5. Kirim Respons JSON Final ---
echo json_encode($response);
exit();

?>