<?php
require_once __DIR__ . '/../../config/session.php';
requireAdmin();
require_once __DIR__ . '/../../config/config.php';
require_once __DIR__ . '/../../functions/csrf.php';

if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
    header('Location: ./');
    exit;
}

if (!verifyCSRFToken($_POST['csrf_token'] ?? '')) {
    setFlash('error', 'Invalid CSRF Token.');
    header('Location: ./');
    exit;
}

$db = getDB();
$action = $_POST['action'] ?? '';
$id = $_POST['id'] ?? null;

$nik = $_POST['nik'];
$nama_lengkap = $_POST['nama_lengkap'];
$tanggal_lahir = $_POST['tanggal_lahir'];
$alamat = $_POST['alamat'];
$no_hp = $_POST['no_hp'];
$nama_suami = $_POST['nama_suami'];
$no_hp_suami = $_POST['no_hp_suami'];
$golongan_darah = $_POST['golongan_darah'];
$bidan_id = $_POST['bidan_id'];
$kehamilan_ke = $_POST['kehamilan_ke'];
$hpht = $_POST['hpht'];
$hpl = $_POST['hpl'];
$status = $_POST['status'];
$catatan = $_POST['catatan'];

try {
    if ($action === 'tambah') {
        // Cek duplicate NIK
        $stmt = $db->prepare("SELECT id FROM ibu_hamil WHERE nik = ?");
        $stmt->execute([$nik]);
        if ($stmt->fetch()) {
            setFlash('error', 'NIK sudah terdaftar.');
            header('Location: tambah');
            exit;
        }

        $tanggal_daftar = date('Y-m-d');
        
        $sql = "INSERT INTO ibu_hamil (nik, nama_lengkap, tanggal_lahir, alamat, no_hp, nama_suami, no_hp_suami, golongan_darah, bidan_id, kehamilan_ke, hpht, hpl, status, catatan, tanggal_daftar) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
        $stmt = $db->prepare($sql);
        $stmt->execute([$nik, $nama_lengkap, $tanggal_lahir, $alamat, $no_hp, $nama_suami, $no_hp_suami, $golongan_darah, $bidan_id, $kehamilan_ke, $hpht, $hpl, $status, $catatan, $tanggal_daftar]);
        
        $ibu_hamil_id = $db->lastInsertId();
        
        // Buat akun user otomatis
        $password = str_replace('-', '', date('dmY', strtotime($tanggal_lahir))); // format ddmmyyyy dari tgl lahir
        
        $sql_user = "INSERT INTO users (username, password, nama_lengkap, role, no_hp, is_active, ibu_hamil_id) VALUES (?, ?, ?, 'user', ?, 1, ?)";
        $stmt_user = $db->prepare($sql_user);
        $stmt_user->execute([$nik, $password, $nama_lengkap, $no_hp, $ibu_hamil_id]);

        setFlash('success', 'Data Ibu Hamil berhasil ditambahkan dan akun berhasil dibuat.');
    } elseif ($action === 'edit' && $id) {
        // Cek NIK duplicate untuk record lain
        $stmt = $db->prepare("SELECT id FROM ibu_hamil WHERE nik = ? AND id != ?");
        $stmt->execute([$nik, $id]);
        if ($stmt->fetch()) {
            setFlash('error', 'NIK sudah terdaftar pada record lain.');
            header('Location: edit?id='.$id);
            exit;
        }

        $sql = "UPDATE ibu_hamil SET nik=?, nama_lengkap=?, tanggal_lahir=?, alamat=?, no_hp=?, nama_suami=?, no_hp_suami=?, golongan_darah=?, bidan_id=?, kehamilan_ke=?, hpht=?, hpl=?, status=?, catatan=? WHERE id=?";
        $stmt = $db->prepare($sql);
        $stmt->execute([$nik, $nama_lengkap, $tanggal_lahir, $alamat, $no_hp, $nama_suami, $no_hp_suami, $golongan_darah, $bidan_id, $kehamilan_ke, $hpht, $hpl, $status, $catatan, $id]);
        
        // Update data user terkait
        $sql_user = "UPDATE users SET username=?, nama_lengkap=?, no_hp=? WHERE ibu_hamil_id=?";
        $stmt_user = $db->prepare($sql_user);
        $stmt_user->execute([$nik, $nama_lengkap, $no_hp, $id]);

        setFlash('success', 'Data Ibu Hamil berhasil diperbarui.');
    }
} catch (PDOException $e) {
    setFlash('error', 'Terjadi kesalahan sistem: ' . $e->getMessage());
}

header('Location: ./');
exit;
