<?php
session_start();

// Periksa apakah pengguna sudah login sebagai jejaring
if (!isset($_SESSION['jejaring_logged_in']) || !$_SESSION['jejaring_logged_in']) {
    header('Location: ../auth/jejaring_login.php');
    exit();
}

// Pastikan Anda telah menyesuaikan path ke file koneksi database
include_once 'db_connect.php'; 

// ==========================================================
// FUNGSI UNTUK MENGIRIM NOTIFIKASI WHATSAPP (MENGGUNAKAN API FONNTE MODERN)
// ==========================================================
/**
 * Mengirim notifikasi WhatsApp menggunakan API Fonnte (endpoint modern).
 * Termasuk konversi nomor telepon dari format lokal (08xx) ke format 628xx.
 *
 * @param string $target_phone Nomor tujuan (dari DB, bisa 08xx)
 * @param string $message Isi pesan
 * @param PDO $pdo Objek koneksi database untuk mengambil API Key
 * @return bool True jika berhasil, False jika gagal.
 */
function sendWhatsAppNotification($target_phone, $message, $pdo) {
    
    // ------------------------------------------------
    // KONVERSI NOMOR: Dari 08xx ke 628xx
    // ------------------------------------------------
    $target_phone = preg_replace('/[^0-9]/', '', $target_phone);
    if (!empty($target_phone) && substr($target_phone, 0, 1) === '0') {
        $target_phone = '62' . substr($target_phone, 1);
    }
    
    if (empty($target_phone)) {
        error_log("Gagal: Nomor telepon tujuan setelah konversi kosong.");
        return false;
    }

    // 1. Ambil API Key dari tabel fonnte_api_keys (Menggunakan query dari fitur lain Anda)
    try {
        $stmtFonnte = $pdo->query("SELECT api_key FROM fonnte_api_keys LIMIT 1");
        $fonnteData = $stmtFonnte->fetch(PDO::FETCH_ASSOC);
        $apiKey = $fonnteData['api_key'] ?? null;
        
        if (empty($apiKey)) {
            error_log("Gagal: API Key Fonnte tidak ditemukan di database.");
            return false;
        }

    } catch (PDOException $e) {
        error_log("Error saat mengambil API Key: " . $e->getMessage());
        return false;
    }

    // 2. Siapkan data dan headers sesuai implementasi API modern Anda
    $data = [
        'target' => $target_phone, // Nomor yang sudah diformat 62xx
        'message' => $message,
    ];
    $url = 'https://api.fonnte.com/send'; 

    // 3. Kirim permintaan menggunakan cURL
    $curl = curl_init();
    curl_setopt_array($curl, [
        CURLOPT_URL => $url,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_ENCODING => '',
        CURLOPT_MAXREDIRS => 10,
        CURLOPT_TIMEOUT => 0,
        CURLOPT_FOLLOWLOCATION => true,
        CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
        CURLOPT_CUSTOMREQUEST => 'POST',
        CURLOPT_POSTFIELDS => $data,
        CURLOPT_HTTPHEADER => [
            'Authorization: ' . $apiKey // Menggunakan Authorization Header
        ],
    ]);

    $response = curl_exec($curl);
    $err = curl_error($curl);
    $http_code = curl_getinfo($curl, CURLINFO_HTTP_CODE);
    curl_close($curl);

    if ($err) {
        error_log("cURL Error (Fonnte Modern): " . $err);
        return false;
    } 
    
    // Asumsi berhasil jika tidak ada error cURL (meskipun HTTP 200 lebih baik)
    // Anda bisa menambahkan pengecekan JSON response Fonnte di sini.
    if ($http_code != 200) {
        error_log("Fonnte API HTTP Error: " . $http_code . " Response: " . $response);
        return false;
    }

    return true;
}
// ==========================================================
// AKHIR FUNGSI WHATSAPP
// ==========================================================

// Hanya proses jika request adalah POST
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    // Mengambil dan membersihkan data dari POST
    $nama = filter_input(INPUT_POST, 'nama', FILTER_SANITIZE_STRING);
    // ✅ TAMBAHAN: Ambil namasuami dan phone_number dari input form
    $namasuami = filter_input(INPUT_POST, 'namasuami', FILTER_SANITIZE_STRING);
    $phone_number = filter_input(INPUT_POST, 'phone_number', FILTER_SANITIZE_STRING);
    // Akhir TAMBAHAN
    $nik_ibu = filter_input(INPUT_POST, 'nik_ibu', FILTER_SANITIZE_STRING);
    $alamat = filter_input(INPUT_POST, 'alamat', FILTER_SANITIZE_STRING);
    $desa = filter_input(INPUT_POST, 'desa', FILTER_SANITIZE_STRING);
    $rt = filter_input(INPUT_POST, 'rt', FILTER_VALIDATE_INT);
    $rw = filter_input(INPUT_POST, 'rw', FILTER_VALIDATE_INT);
    $hpht = filter_input(INPUT_POST, 'hpht', FILTER_SANITIZE_STRING);
    $usia_kehamilan_hari = filter_input(INPUT_POST, 'usia_kehamilan_hari', FILTER_VALIDATE_INT);
    $sumber_laporan = filter_input(INPUT_POST, 'sumber_laporan', FILTER_SANITIZE_STRING);
    $tanggal_lapor = filter_input(INPUT_POST, 'tanggal_lapor', FILTER_SANITIZE_STRING);

    $type_sumber = "jejaring"; 

    // ==========================================================
    // VALIDASI DATA
    // ==========================================================
    $error_message = '';

    if (empty($nama) || empty($nik_ibu) || empty($alamat) || empty($desa) || empty($hpht) || empty($sumber_laporan) || empty($tanggal_lapor)) {
        $error_message = "Semua field dasar (Nama, NIK, Alamat, Desa, HPHT, Tanggal Lapor) wajib diisi.";
    }
    // ... (sisa kode validasi Anda)

    if (empty($error_message)) {
        if ((isset($_POST['rt']) && $_POST['rt'] === '') || (isset($_POST['rw']) && $_POST['rw'] === '')) {
            $error_message = "Field RT dan RW wajib diisi dengan angka.";
        }
        elseif ($rt === false || $rw === false) {
            $error_message = "Format RT dan RW tidak valid. Harap masukkan angka saja.";
        }
    }

    if (empty($error_message) && !preg_match('/^\d{16}$/', $nik_ibu)) {
        $error_message = "NIK harus terdiri dari 16 digit angka.";
    }

    if (empty($error_message) && (!DateTime::createFromFormat('Y-m-d', $hpht) || !DateTime::createFromFormat('Y-m-d', $tanggal_lapor))) {
        $error_message = "Format tanggal HPHT atau Tanggal Lapor tidak valid (gunakan format YYYY-MM-DD).";
    }

    if (!empty($error_message)) {
        $_SESSION['error_message'] = $error_message;
        header('Location: ../jejaring/kehamilan/index.php');
        exit();
    }

    if ($usia_kehamilan_hari === false || $usia_kehamilan_hari < 0) {
        $usia_kehamilan_hari = NULL;
    }
    // ==========================================================
    // AKHIR VALIDASI
    // ==========================================================


    // ==========================================================
    // PROSES PENYIMPANAN KE DATABASE & KIRIM WA
    // ==========================================================
    try {
        if (!isset($pdo) || !$pdo instanceof PDO) {
            throw new PDOException("Koneksi database (PDO) tidak tersedia. Periksa db_connect.php.");
        }

        // ------------------------------------------------------
        // 1. SIMPAN LAPORAN KEHAMILAN
        // ------------------------------------------------------
        // ✅ PERUBAHAN QUERY: Tambahkan kolom namasuami dan phone_number
        $query = "INSERT INTO laporan_kehamilan (nama, nik, namasuami, phone_number, alamat, desa, rt, rw, hpht, hari_tidak_haid, sumber_laporan, tanggal_lapor, type_sumber)
                    VALUES (:nama, :nik_ibu, :namasuami, :phone_number, :alamat, :desa, :rt, :rw, :hpht, :usia_kehamilan_hari, :sumber_laporan, :tanggal_lapor, :type_sumber)";
        
        $stmt = $pdo->prepare($query);
        $stmt->bindParam(':nama', $nama, PDO::PARAM_STR);
        $stmt->bindParam(':nik_ibu', $nik_ibu, PDO::PARAM_STR);
        // ✅ BIND PARAMETER BARU
        $stmt->bindParam(':namasuami', $namasuami, PDO::PARAM_STR);
        $stmt->bindParam(':phone_number', $phone_number, PDO::PARAM_STR);
        // Akhir BIND PARAMETER BARU
        $stmt->bindParam(':alamat', $alamat, PDO::PARAM_STR);
        $stmt->bindParam(':desa', $desa, PDO::PARAM_STR);
        $stmt->bindParam(':rt', $rt, PDO::PARAM_INT);
        $stmt->bindParam(':rw', $rw, PDO::PARAM_INT);
        $stmt->bindParam(':hpht', $hpht, PDO::PARAM_STR);
        $stmt->bindParam(':usia_kehamilan_hari', $usia_kehamilan_hari, PDO::PARAM_INT);
        $stmt->bindParam(':sumber_laporan', $sumber_laporan, PDO::PARAM_STR);
        $stmt->bindParam(':tanggal_lapor', $tanggal_lapor, PDO::PARAM_STR);
        $stmt->bindParam(':type_sumber', $type_sumber, PDO::PARAM_STR);

        $stmt->execute();

        $_SESSION['success_message'] = "Laporan kehamilan atas nama *" . htmlspecialchars($nama) . "* berhasil ditambahkan!";

        // ------------------------------------------------------
        // 2. CARI BIDAN DESA & KIRIM WA NOTIFIKASI
        // ------------------------------------------------------

        $query_bidan = "SELECT phone_number, nama_lengkap FROM users_laporan_bumil 
                        WHERE role = 'bidan_desa' AND desa = :desa LIMIT 1";
        $stmt_bidan = $pdo->prepare($query_bidan);
        $stmt_bidan->bindParam(':desa', $desa, PDO::PARAM_STR);
        $stmt_bidan->execute();
        $bidan = $stmt_bidan->fetch(PDO::FETCH_ASSOC);

        if ($bidan && !empty($bidan['phone_number'])) {
            $target_phone = $bidan['phone_number'];
            $nama_bidan = $bidan['nama_lengkap'];
            $waktu_sekarang = date('d F Y H:i:s');
            
            // Kata-kata WA yang dikembangkan
            $message = "✨ *Notifikasi Urgent! Laporan Bumil Baru Masuk* ✨\n\n";
            $message .= "Yth. Bidan *{$nama_bidan}* di Desa *{$desa}*,\n\n";
            $message .= "Telah masuk laporan kasus ibu hamil baru yang berasal dari jejaring (*{$sumber_laporan}*). Mohon segera lakukan verifikasi dan tindak lanjut di lapangan.\n\n";
            $message .= "*Detail Laporan Ibu Hamil:*\n";
            $message .= "Nama Ibu: *{$nama}*\n";
            $message .= "Nama Suami: *{$namasuami}*\n"; // Ditambahkan ke pesan WA
            $message .= "Nomor WA Ibu: {$phone_number}\n"; // Ditambahkan ke pesan WA
            $message .= "NIK: {$nik_ibu}\n";
            $message .= "Alamat: {$alamat} RT.{$rt}/RW.{$rw}\n";
            $message .= "Dilaporkan: {$waktu_sekarang}\n\n";
            $message .= "⚠️ *Wajib Tindak Lanjut Maksimal 3 Hari* setelah notifikasi ini diterima.\n\n";
            $message .= "Terima kasih atas respons cepat Anda demi kesehatan Ibu dan Anak.";

            // Panggil fungsi yang sudah menggunakan API modern
            $wa_sent = sendWhatsAppNotification($target_phone, $message, $pdo);

            if (!$wa_sent) {
                $_SESSION['warning_message'] = "⚠️ Laporan berhasil disimpan, tetapi notifikasi WA ke Bidan Desa gagal dikirim. Silakan cek konfigurasi API Key Fonnte atau log error server.";
            }

        } else {
            $_SESSION['warning_message'] = "⚠️ Laporan berhasil disimpan, tetapi Bidan Desa untuk *{$desa}* tidak ditemukan atau nomor HP tidak terdaftar. Notifikasi WA dibatalkan.";
        }
    } catch (PDOException $e) {
        $_SESSION['error_message'] = "Gagal menyimpan laporan ke database: " . $e->getMessage();
    } 

    // Redirect setelah semua proses selesai
    header('Location: ../jejaring/kehamilan/index.php');
    exit();

} else {
    // Jika akses bukan dari POST, redirect dengan pesan error
    $_SESSION['error_message'] = "Akses tidak sah.";
    header('Location: ../jejaring/kehamilan/index.php');
    exit();
}
?>