<?php
// api/submit_data_kehamilan.php

session_start();
header('Content-Type: application/json');

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

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

require_once 'db_connect.php';

if (!isset($_SESSION['user_id'])) {
    $response['message'] = 'Anda harus login untuk menyimpan data kehamilan.';
    echo json_encode($response);
    exit();
}
$user_id = $_SESSION['user_id'];

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

$errors = [];

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

// Systole (MASIH WAJIB dan validasi rentang)
$systole = $_POST['systole'] ?? '';
if (!filter_var($systole, FILTER_VALIDATE_INT) || $systole <= 0 || $systole > 300) {
    $errors[] = 'Systole harus angka positif dan valid.';
}

// Diastole (MASIH WAJIB dan validasi rentang)
$diastole = $_POST['diastole'] ?? '';
if (!filter_var($diastole, FILTER_VALIDATE_INT) || $diastole <= 0 || $diastole > 200) {
    $errors[] = 'Diastole harus angka positif dan valid.';
}

// Usia Kehamilan (UK) (MASIH WAJIB dan validasi rentang)
$uk = $_POST['uk'] ?? '';
if (!filter_var($uk, FILTER_VALIDATE_INT) || $uk < 0 || $uk > 42) {
    $errors[] = 'Usia kehamilan harus angka positif (0-42 minggu).';
}

// Denyut Jantung Janin (DJJ) - BOLEH KOSONG ATAU 0
$djj = $_POST['djj'] ?? ''; // Jika kosong, akan menjadi string kosong ""
if ($djj === '') { // Jika input benar-benar kosong, set ke NULL
    $djj = null; // Ini akan disimpan sebagai NULL di DB
} elseif (!filter_var($djj, FILTER_VALIDATE_INT) && $djj !== '0') {
    // Jika tidak kosong, dan bukan integer, dan bukan string "0"
    $errors[] = 'DJJ harus angka (boleh 0) atau kosong.';
} elseif ($djj < 0) { // Masih melarang angka negatif
    $errors[] = 'DJJ tidak boleh angka negatif.';
}

// Tinggi Fundus Uteri (TFU) - BOLEH KOSONG ATAU 0
$tfu = $_POST['tfu'] ?? ''; // Jika kosong, akan menjadi string kosong ""
$tfu = str_replace(',', '.', $tfu); // Mengatasi koma sebagai desimal
if ($tfu === '') { // Jika input benar-benar kosong, set ke NULL
    $tfu = null; // Ini akan disimpan sebagai NULL di DB
} elseif (!filter_var($tfu, FILTER_VALIDATE_FLOAT) && $tfu !== '0') {
    // Jika tidak kosong, dan bukan float, dan bukan string "0"
    $errors[] = 'TFU harus angka (boleh 0 atau desimal) atau kosong.';
} elseif ($tfu < 0) { // Masih melarang angka negatif
    $errors[] = 'TFU tidak boleh angka negatif.';
}


if (!empty($errors)) {
    $response['message'] = implode('<br>', $errors);
    echo json_encode($response);
    exit();
}

try {
    $stmt = $pdo->prepare("
        INSERT INTO data_kehamilan_pemeriksaan (
            user_id, tanggal_periksa, systole, diastole,
            usia_kehamilan_minggu, denyut_jantung_janin, tinggi_fundus_uteri
        ) VALUES (
            :user_id, :tanggal_periksa, :systole, :diastole,
            :usia_kehamilan_minggu, :denyut_jantung_janin, :tinggi_fundus_uteri
        )
    ");

    $stmt->bindParam(':user_id', $user_id, PDO::PARAM_INT);
    $stmt->bindParam(':tanggal_periksa', $tanggalPeriksa, PDO::PARAM_STR);
    $stmt->bindParam(':systole', $systole, PDO::PARAM_INT);
    $stmt->bindParam(':diastole', $diastole, PDO::PARAM_INT);
    $stmt->bindParam(':usia_kehamilan_minggu', $uk, PDO::PARAM_INT);
    
    // Binding untuk DJJ dan TFU: gunakan PARAM_NULL jika null, atau sesuai tipe data jika ada nilai
    if ($djj === null) {
        $stmt->bindParam(':denyut_jantung_janin', $djj, PDO::PARAM_NULL);
    } else {
        $stmt->bindParam(':denyut_jantung_janin', $djj, PDO::PARAM_INT);
    }
    
    if ($tfu === null) {
        $stmt->bindParam(':tinggi_fundus_uteri', $tfu, PDO::PARAM_NULL);
    } else {
        // Karena TFU adalah DECIMAL, PDO::PARAM_STR adalah pilihan terbaik untuk float/decimal
        $stmt->bindParam(':tinggi_fundus_uteri', $tfu, PDO::PARAM_STR); 
    }

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

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

echo json_encode($response);
exit();
?>