<?php
defined('BASEPATH') or exit('No direct script access allowed');

class Mcudata2 extends CI_Controller
{


       /**
     * Method untuk mengambil data gabungan dari 2 API dan menampilkannya sebagai JSON untuk tabel.
     */
     public function datareportmcu()
    {
        // Menggunakan metode input CodeIgniter
        $tanggalawal = $this->input->post('TANGGAL_AWAL');
        $tanggalakhir = $this->input->post('TANGGAL_AKHIR');
        $kdgrupmcu = $this->input->post('KD_GROUP_MCU');

        if ($tanggalawal && $tanggalakhir && $kdgrupmcu) {
            $tanggal_awal = date('d/m/Y', strtotime($tanggalawal));
            $tanggal_akhir = date('d/m/Y', strtotime($tanggalakhir));

            // --- LANGKAH 1: Ambil dan proses data LAB ---
            $pivoted_labs = [];
            $lab_headers = [];
            $response_lab = $this->fetch_api_data('http://103.255.241.146/api/service_rs/tampil_hasil_mcu_lab', $tanggal_awal, $tanggal_akhir, $kdgrupmcu);
            
            if ($response_lab) {
                foreach ($response_lab as $lab_item) {
                    if (!empty($lab_item['nm_detail_periksa'])) {
                        
                        $nama_detail = $lab_item['nm_detail_periksa'];
                        $nama_periksa = $lab_item['nm_periksa'];

                        // --- PENANGANAN KHUSUS UNTUK DUPLIKAT (SESUAI PERMINTAAN) ---
                        // Untuk 'Leukosit', hanya ambil yang nm_periksa-nya juga 'Leukosit'
                        if (strcasecmp($nama_detail, 'Leukosit') == 0) {
                            if (strcasecmp($nama_periksa, 'Leukosit') != 0) {
                                continue; // Abaikan item ini (misal: Leukosit dari Urine)
                            }
                        }
                        // Terapkan logika yang sama untuk 'Eritrosit'
                        if (strcasecmp($nama_detail, 'Eritrosit') == 0) {
                            if (strcasecmp($nama_periksa, 'Eritrosit') != 0) {
                                continue; // Abaikan item ini (misal: Eritrosit dari Urine)
                            }
                        }
                        // --- AKHIR PENANGANAN KHUSUS ---

                        $kd_reg = $lab_item['kd_registrasi'];
                        $nama_pemeriksaan = $nama_detail; // Tetap gunakan nm_detail_periksa sebagai header
                        $nilai_hasil = $lab_item['nilai_hasil'];
                        $pivoted_labs[$kd_reg][$nama_pemeriksaan] = $nilai_hasil;
                        if (!in_array($nama_pemeriksaan, $lab_headers)) {
                            $lab_headers[] = $nama_pemeriksaan;
                        }
                    }
                }
            }
            //sort($lab_headers); // Urutkan nama kolom lab agar konsisten
              // --- LOGIKA URUTAN KOLOM LAB KUSTOM ---
            $custom_lab_order = [
                'HEMOGLOBIN', 'LEUKOSIT', 'HEMATOKRIT', 'ERITROSIT', 'TROMBOSIT', 'MCV', 'MCH', 'MCHC', 'RDW-CV', 'MPV', 'BASOFIL', 'EOSINOFIL', 'BATANG', 'SEGMEN', 'LIMSOFIT', 'MONOSIT', 'NETROFIL', 'TOTAL LIMSOFIT', 'NLR', 'LED 1', 'LED 2',
                'GLUKOSA PUASA STIK', 'GLUKOSA 2 JAM PP STIK', 'SGOT', 'SGPT', 'CHOLESTEROL TOTAL', 'Triglycerida', 'HDL CHOLESTEROL', 'LDL CHOLESTEROL', 'UREUM DARAH', 'CREATINE DARAH', 'ASAM URAT STIK',
                'HBS AG',
                'WARNA', 'BAU BERAT JENIS', 'PH', 'GLUKOSA', 'PROTEIN URINE', 'BILIRUBIN', 'UROBILLINOGEN', 'DARAH', 'KETON', 'NITRIT', 'LEUKOSIT ESTERASE', 'ERITROSIT', 'LEUKOSIT', 'SILINDER', 'GRANULA', 'EPITEL', 'KRISTAL', 'PARASIT', 'BAKTERI', 'SEL RAGI'
            ];

            usort($lab_headers, function($a, $b) use ($custom_lab_order) {
                $pos_a = array_search(strtoupper($a), $custom_lab_order);
                $pos_b = array_search(strtoupper($b), $custom_lab_order);
            
                if ($pos_a === false && $pos_b === false) { return $a <=> $b; } // Keduanya tidak ada di daftar, urutkan alfabetis
                if ($pos_a === false) { return 1; } // A tidak ada di daftar, letakkan di akhir
                if ($pos_b === false) { return -1; } // B tidak ada di daftar, letakkan di akhir
                return $pos_a <=> $pos_b; // Keduanya ada di daftar, urutkan berdasarkan posisi
            });


            // --- LANGKAH 2: Ambil data MCU utama ---
            $data_utama = $this->fetch_api_data('http://103.255.241.146/api/service_rs/tampil_hasil_mcu', $tanggal_awal, $tanggal_akhir, $kdgrupmcu);

            if ($data_utama === null) {
                 echo json_encode(['error' => 'Gagal mengambil data MCU utama atau format tidak sesuai.']);
                 return;
            }

            // --- LANGKAH 3: Gabungkan data MCU utama dengan data Lab yang sudah dipivot ---
            $data_gabungan = [];
            foreach ($data_utama as $item) {
                $kd_registrasi_saat_ini = $item['kd_registrasi'];
                
                // Tambahkan semua kolom hasil lab dinamis ke item
                foreach ($lab_headers as $header) {
                    // Cek apakah pasien ini memiliki hasil untuk pemeriksaan ini
                    if (isset($pivoted_labs[$kd_registrasi_saat_ini][$header])) {
                        $item[$header] = $pivoted_labs[$kd_registrasi_saat_ini][$header];
                    } else {
                        // Beri nilai kosong jika tidak ada hasil
                        $item[$header] = '-'; 
                    }
                }
                $data_gabungan[] = $item;
            }

            // --- LANGKAH 4: Siapkan struktur JSON akhir untuk dikirim ke view ---
            $static_headers = ['No Registrasi','Nama Perusahaan', 'Nama Pasien', 'Usia', 'Jenis Kelamin', 'Tgl Periksa', 'No RM', 'Jabatan', 'Paket MCU'];
            $final_headers = array_merge($static_headers, $lab_headers);

            $final_response = [
                'response' => [
                    'headers' => $final_headers,
                    'data' => $data_gabungan
                ]
            ];
            
            header('Content-Type: application/json');
            echo json_encode($final_response);

        } else {
            echo json_encode(['error' => 'Parameter tanggal atau grup MCU tidak lengkap.']);
        }
    }




    
    /**
     * Helper function untuk memanggil API dan mengembalikan data 'response'.
     * Mencegah duplikasi kode cURL.
     */
    /**
     * Helper function untuk memanggil API dan mengembalikan data 'response'.
     * Mencegah duplikasi kode cURL.
     */
    private function fetch_api_data($url, $tanggal_awal, $tanggal_akhir, $kdgrupmcu)
    {
        $curl = curl_init();
        curl_setopt_array($curl, array(
            CURLOPT_URL => $url,
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_ENCODING => '',
            CURLOPT_MAXREDIRS => 10,
            CURLOPT_TIMEOUT => 30,
            CURLOPT_FOLLOWLOCATION => true,
            CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
            CURLOPT_CUSTOMREQUEST => 'POST',
            CURLOPT_POSTFIELDS => array(
                'TANGGAL_AWAL' => $tanggal_awal,
                'TANGGAL_AKHIR' => $tanggal_akhir,
                'KD_GROUP_MCU' => $kdgrupmcu
            ),
        ));
        $response = curl_exec($curl);
        curl_close($curl);

        if ($response) {
            $data = json_decode($response, true);
            if (json_last_error() === JSON_ERROR_NONE && isset($data['response']) && is_array($data['response'])) {
                return $data['response'];
            }
        }
        return null; // Kembalikan null jika gagal atau format salah
    }

    
    public function downloaddatamcu2()
    {
        // Menggunakan metode input CodeIgniter
        $tanggalawal = $this->input->get('TANGGAL_AWAL');
        $tanggalakhir = $this->input->get('TANGGAL_AKHIR');
        $kdgrupmcu = $this->input->get('KD_GROUP_MCU');

        if ($tanggalawal && $tanggalakhir && $kdgrupmcu) {
            $tanggal_awal = date('d/m/Y', strtotime($tanggalawal));
            $tanggal_akhir = date('d/m/Y', strtotime($tanggalakhir));

             // --- Proses data sama seperti di datareportmcu ---
            $pivoted_labs = [];
            $lab_headers = [];
            $response_lab = $this->fetch_api_data('http://103.255.241.146/api/service_rs/tampil_hasil_mcu_lab', $tanggal_awal, $tanggal_akhir, $kdgrupmcu);
            
            if ($response_lab) {
                foreach ($response_lab as $lab_item) {
                    if (!empty($lab_item['nm_detail_periksa'])) {
                        
                        $nama_detail = $lab_item['nm_detail_periksa'];
                        $nama_periksa = $lab_item['nm_periksa'];

                        // --- PENANGANAN KHUSUS UNTUK DUPLIKAT (SESUAI PERMINTAAN) ---
                        // Untuk 'Leukosit', hanya ambil yang nm_periksa-nya juga 'Leukosit'
                        if (strcasecmp($nama_detail, 'Leukosit') == 0) {
                            if (strcasecmp($nama_periksa, 'Leukosit') != 0) {
                                continue; // Abaikan item ini (misal: Leukosit dari Urine)
                            }
                        }
                        // Terapkan logika yang sama untuk 'Eritrosit'
                        if (strcasecmp($nama_detail, 'Eritrosit') == 0) {
                            if (strcasecmp($nama_periksa, 'Eritrosit') != 0) {
                                continue; // Abaikan item ini (misal: Eritrosit dari Urine)
                            }
                        }
                        // --- AKHIR PENANGANAN KHUSUS ---

                        $kd_reg = $lab_item['kd_registrasi'];
                        $nama_pemeriksaan = $nama_detail; // Tetap gunakan nm_detail_periksa sebagai header
                        $nilai_hasil = $lab_item['nilai_hasil'];
                        $pivoted_labs[$kd_reg][$nama_pemeriksaan] = $nilai_hasil;
                        if (!in_array($nama_pemeriksaan, $lab_headers)) {
                            $lab_headers[] = $nama_pemeriksaan;
                        }
                    }
                }
            }
            //sort($lab_headers);

            
              // --- LOGIKA URUTAN KOLOM LAB ---
            $custom_lab_order = [
                'HEMOGLOBIN', 'LEUKOSIT', 'HEMATOKRIT', 'ERITROSIT', 'TROMBOSIT', 'MCV', 'MCH', 'MCHC', 'RDW-CV', 'MPV', 'BASOFIL', 'EOSINOFIL', 'BATANG', 'SEGMEN', 'LIMSOFIT', 'MONOSIT', 'NETROFIL', 'TOTAL LIMSOFIT', 'NLR', 'LED 1', 'LED 2',
                'GLUKOSA PUASA STIK', 'GLUKOSA 2 JAM PP STIK', 'SGOT', 'SGPT', 'CHOLESTEROL TOTAL', 'Triglycerida', 'HDL CHOLESTEROL', 'LDL CHOLESTEROL', 'UREUM DARAH', 'CREATINE DARAH', 'ASAM URAT STIK',
                'HBS AG',
                'WARNA', 'BAU BERAT JENIS', 'PH', 'GLUKOSA', 'PROTEIN URINE', 'BILIRUBIN', 'UROBILLINOGEN', 'DARAH', 'KETON', 'NITRIT', 'LEUKOSIT ESTERASE', 'ERITROSIT', 'LEUKOSIT', 'SILINDER', 'GRANULA', 'EPITEL', 'KRISTAL', 'PARASIT', 'BAKTERI', 'SEL RAGI'
            ];

            usort($lab_headers, function($a, $b) use ($custom_lab_order) {
                $pos_a = array_search(strtoupper($a), $custom_lab_order);
                $pos_b = array_search(strtoupper($b), $custom_lab_order);
            
                if ($pos_a === false && $pos_b === false) { return $a <=> $b; } // Keduanya tidak ada di daftar, urutkan alfabetis
                if ($pos_a === false) { return 1; } // A tidak ada di daftar, letakkan di akhir
                if ($pos_b === false) { return -1; } // B tidak ada di daftar, letakkan di akhir
                return $pos_a <=> $pos_b; // Keduanya ada di daftar, urutkan berdasarkan posisi
            });
            // --- AKHIR LOGIKA URUTAN ---

            $data_utama = $this->fetch_api_data('http://103.255.241.146/api/service_rs/tampil_hasil_mcu', $tanggal_awal, $tanggal_akhir, $kdgrupmcu);
            
            if ($data_utama === null) {
                echo "Gagal mengambil data MCU utama atau format tidak sesuai.";
                return;
            }

            // $data_gabungan = [];
            // foreach ($data_utama as $item) {
            //     $kd_registrasi_saat_ini = $item['kd_registrasi'];
            //     foreach ($lab_headers as $header) {
            //         $item[$header] = isset($pivoted_labs[$kd_registrasi_saat_ini][$header]) ? $pivoted_labs[$kd_registrasi_saat_ini][$header] : '-';
            //     }
            //     $data_gabungan[] = $item;
            // }

            // --- LANGKAH 3: Gabungkan dan Proses data ---
            $data_gabungan = $this->process_and_merge_data($data_utama, $pivoted_labs, $lab_headers);

            // --- Tulis ke Excel ---
            require_once APPPATH . '../vendor/autoload.php';
            $spreadsheet = new \PhpOffice\PhpSpreadsheet\Spreadsheet();
            $sheet = $spreadsheet->getActiveSheet();

            // --- HEADER BARU UNTUK EXCEL ---
            $static_headers = [
                
                'Nama Pelaksana Fisik', 'Kode Registrasi', 'Tanggal MCU', 'Nama Pasien', 'Usia', 'Jenis Kelamin', 'Kode Paket MCU',
                //Anamnesa
                'Keluhan Utama','Obat Yang Digunakan', 'Riwayat Penyakit', 'Riwayat Penyakit Keluarga', 'Riwayat Penyakit Terdahulu', 'Info lainya','Riwayat Operasi',
                // Pemeriksaan Dokter Umum 
                'Status Perokok','Jumlah Rokok','Kebiasaan Alkohol','Status Olahraga','Puasa 8-12 jam','Kaca Mata', 'Buta Warna','Durasi Tidur','Bebas paparan bising', 'Minum obat terakhir', 'Menstruasi', 'Sedang Hamil',
                //Keterangan Sehat 
                'Catatan', 'Saran', 'Status Kesehatan',
                //Kesimpulan Anamnesa
                'Kesimpulan Anamnesis',
                // Pemeriksaan Fisik
                'Sistolik', 'Diastolik', 'MAP', 'Suhu', 'Nadi', 'Laju Pernafasan', 'SpO2', 'Tinggi', 'Berat Badan', 'Lingkar Pinggang', 'Index Masa Tubuh (IMT)', 'Klasifikasi IMT', 'Kondisi Umum', 'Kesadaran Umum', 'Kepala Leher', 'Visus', 'Pupil', 'Segmen Anterior', 'Segmen Posterior', 
                'Tyroid', 'JVP', 'Telinga', 'Hidung', 'Tenggorokan', 'Mulut', 'Gigi','Kelenjar','Jantung', 'Paru-paru', 'Perut',  'Alat Kelamin', 'Anus dan Rektum', 'Anggota Gerak & Punggung', 'Reflek', 'Sensibilitas','Kesimpulan Fisik',

                // Pemeriksaan Radiologi
                'Kesimpulan Radiologi', 'Kesan Thorax', 'Kesan USG',
                // Pemeriksaan Lab
                'Kesimpulan Darah', 'Kesimpulan Urine', 'Kesimpulan Darah Kimia', 'Kesimpulan Tumor Marker', 'Kesimpulan Fases',
                //Pemeriksaan EKG
                'Kesimpulan EKG', 'Saran EKG', 'Hasil EKG',

                //Pemesiksaan Treadmill
                'Kesimpulan Treadmill', 'Saran Treadmill','Hasil Treadmill',
                //Pemeriksaan Audiometri
                'Kesimpulan Audiometri', 'Saran Audiometri',
                //Pemeriksaan Testrockpot
                'Kesimpulan Test Rockpot',
                //Kesimpulan SRQ , SDS, SKJ
                'Kesimpulan SRQ 20', 'Kesimpulan SDS', 'Kesimpulan SKJ',
                //Pemeriksaan Spirometri
                'Kesimpulan Spirometri', 'Saran Spirometri','Hasil Spirometri'
            ];
            $final_headers = array_merge($static_headers, $lab_headers);
            
            $sheet->fromArray($final_headers, NULL, 'A1');

            $row_num = 2;
            foreach($data_gabungan as $row_data) {
                // Proses jenis kelamin
                $jenisKelamin = '';
                if (!empty($row_data['alamat_kantor'])) {
                    $lines = preg_split("/\r\n|\n|\r/", $row_data['alamat_kantor']);
                    if (isset($lines[2])) {
                        $parts = explode('/', $lines[2]);
                        $jenisKelamin = trim($parts[0]);
                    }
                }
                if (empty($jenisKelamin) && !empty($row_data['jenis_kelamin'])) {
                    $jenisKelamin = $row_data['jenis_kelamin'];
                }

                // --- PENAMBAHAN LOGIKA BARU UNTUK STATUS KESEHATAN ---
                $statusKesehatan = '-'; // Nilai default
                if (isset($row_data['is_sehat'])) {
                    if ($row_data['is_sehat'] == 'T') {
                        $statusKesehatan = 'Sehat';
                    } elseif ($row_data['is_sehat'] == 'T') {
                        $statusKesehatan = 'Tidak Sehat';
                    }
                }

                // --- PENAMBAHAN LOGIKA BARU UNTUK KONDISI UMUM ---
                $kondisiumum = '-'; // Nilai default
                if (isset($row_data['is_baik'])) {
                    if ($row_data['is_baik'] == 'T') {
                        $kondisiumum = 'Baik';
                    } elseif ($row_data['is_tampak_sakit'] == 'T') {
                        $kondisiumum = 'Tampak Sakit';
                    } elseif ($row_data['is_pucat'] == 'T') {
                        $kondisiumum = 'Pucat';
                    } elseif ($row_data['is_lemah'] == 'T') {
                        $kondisiumum = 'Lemah';
                    } elseif ($row_data['is_kejang'] == 'T') {
                        $kondisiumum = 'Kejang';
                    }
                }

                // --- PENAMBAHAN LOGIKA BARU UNTUK KESADARAN ---
                $kesadaran = '-'; // Nilai default
                if (isset($row_data['is_composmentis'])) {
                    if ($row_data['is_composmentis'] == 'T') {
                        $kesadaran = 'Composmentis';
                    } elseif ($row_data['is_apatis'] == 'T') {
                        $kesadaran = 'Apatis';
                    } elseif ($row_data['is_somnolen'] == 'T') {
                        $kesadaran = 'Somnolen';
                    } elseif ($row_data['is_soporocoma'] == 'T') {
                        $kesadaran = 'Soporocoma';
                    } 
                }

                
                // --- LOGIKA BARU UNTUK STATUS ROKOK ---
                $status_perokok = '-'; // Nilai default
                if (isset($row_data['is_tidak_rokok'])) {
                    if ($row_data['is_tidak_rokok'] == 'T') {
                        $status_perokok = 'Tidak Merokok';
                    } elseif ($row_data['is_mantan_rokok'] == 'T') {
                        $status_perokok = 'Mantan Perokok';
                    } elseif ($row_data['is_sesekali_rokok_elektrik'] == 'T') {
                        $status_perokok = 'Pengguna sesekali rokok elektrik';
                    } elseif ($row_data['is_dual_user_rokok'] == 'T') {
                        $status_perokok = 'Dual User: Rokok Konvensional & Elektrik';
                    } elseif ($row_data['is_rokok_konvensional'] == 'T') {
                        $status_perokok = 'Pengguna Rokok Konvensional';
                    } 
                }


                // ---  LOGIKA BARU UNTUK JUMLAH ROKOK ---
                $jumlah_rokok = '-'; // Nilai default
                if (isset($row_data['is_1_10_rokok'])) {
                    if ($row_data['is_1_10_rokok'] == 'T') {
                        $jumlah_rokok = '1 - 10 Batang perhari';
                    } elseif ($row_data['is_11_20_rokok'] == 'T') {
                        $jumlah_rokok = '11 - 20 Batang perhari';
                    } elseif ($row_data['is_21_30_rokok'] == 'T') {
                        $jumlah_rokok = '21 - 30 Batang perhari';
                    } elseif ($row_data['is_lebih_30_rokok'] == 'T') {
                        $jumlah_rokok = '> 30 Batang perhari';
                    } 
                }

                // ---  LOGIKA  UNTUK  KEBIASAAN ALKOHOL ---
                $status_alkohol = '-'; // Nilai default
                if (isset($row_data['is_tidak_alkohol'])) {
                    if ($row_data['is_tidak_alkohol'] == 'T') {
                        $status_alkohol = 'Tidak Pernah';
                    } elseif ($row_data['is_sesekali_alkohol'] == 'T') {
                        $status_alkohol = 'Sesekali';
                    } elseif ($row_data['is_mantan_candu_alkohol'] == 'T') {
                        $status_alkohol = 'Mantan pecandu alkohol';
                    } elseif ($row_data['is_alkohol_setiap_hari'] == 'T') {
                        $status_alkohol = 'Konsumsi alkohol setiap hari';
                    } elseif ($row_data['is_alkohol_setiap_minggu'] == 'T') {
                        $status_alkohol = 'Konsumsi alkohol setiap minggu';
                    } elseif  ($row_data['is_alkohol_setiap_bulan'] == 'T') {
                        $status_alkohol = 'Konsumsi alkohol setiap bulan';
                    }
                }

                // ---  LOGIKA BARU UNTUK STATUS OLAHRAGA ---
                $status_olahraga = '-'; // Nilai default
                if (isset($row_data['is_olahraga_cukup'])) {
                    if ($row_data['is_olahraga_kurang'] == 'T') {
                        $status_olahraga = '1 - 10 Batang perhari';
                    } elseif ($row_data['is_olahraga_cukup'] == 'T') {
                        $status_olahraga = '11 - 20 Batang perhari';
                    } elseif ($row_data['is_olahraga_lebih'] == 'T') {
                        $status_olahraga = '21 - 30 Batang perhari';
                    } 
                }



                // --- PERBAIKAN: Logika pemisah tensi langsung di sini ---
                // $sistolik = '-';
                // $diastolik = '-';
                // $tensiString = $row_data['tensi'] ?? ''; // Ambil data tensi
                // if (!empty($tensiString) && is_string($tensiString) && strpos($tensiString, '/') !== false) {
                //     $parts = explode('/', $tensiString);
                //     if (count($parts) === 2) {
                //         $sistolik_val = trim($parts[0]);
                //         $diastolik_val = trim($parts[1]);
                //         if ($sistolik_val !== '') {
                //             $sistolik = $sistolik_val;
                //         }
                //         if ($diastolik_val !== '') {
                //             $diastolik = $diastolik_val;
                //         }
                //     }
                // }

                // --- PENAMBAHAN: Logika pemisah Tinggi & Berat Badan ---
                $tinggi_badan = '-';
                $berat_badan = '-';
                $tbbbString = $row_data['tbbb'] ?? ''; // Ambil data tbbb
                if (!empty($tbbbString) && is_string($tbbbString) && strpos($tbbbString, '/') !== false) {
                    $parts_tbbb = explode('/', $tbbbString);
                    if (count($parts_tbbb) === 2) {
                        $tinggi_val = trim($parts_tbbb[0]);
                        $berat_val = trim($parts_tbbb[1]);
                        if ($tinggi_val !== '') {
                            $tinggi_badan = $tinggi_val;
                        }
                        if ($berat_val !== '') {
                            $berat_badan = $berat_val;
                        }
                    }
                }
                // --- Akhir logika pemisah Tinggi & Berat Badan ---



                // --- DATA BARU UNTUK EXCEL ---
                $excel_row = [
                    $row_data['nm_pelaksana_fisik'] ?? '-',
                    $row_data['kd_registrasi'] ?? '-',
                    $row_data['tgl_mcu'] ?? '-',
                    $row_data['nm_pasien'] ?? '-',
                    $row_data['usia'] ?? '-',
                    //$row_data['jenis_kelamin'] ?? '-',
                    $jenisKelamin,
                    $row_data['kd_paket_mcu'] ?? '-',
                    //anamnesis
                    $row_data['keluhan'] ?? '-',
                    $row_data['obat_digunakan'] ?? '-',
                    $row_data['riwayat_penyakit'] ?? '-',
                    $row_data['riwayat_penyakit_keluarga'] ?? '-',
                    $row_data['riwayat_penyakit_terdahulu'] ?? '-',
                    $row_data['lain_lain'] ?? '-',
                    $row_data['nama_operasi'] ?? '-',
                    $status_perokok,
                    $jumlah_rokok,
                    $status_alkohol,
                    //$status_olahraga,
                    $row_data['olahraga'] ?? '-',
                    $row_data['puasa'] ?? '-',
                    $row_data['kaca_mata'] ?? '-',
                    $row_data['buta_warna'] ?? '-',
                    $row_data['durasi_tidur'] ?? '-',
                    $row_data['paparan_bising'] ?? '-',
                    $row_data['obat_terakhir'] ?? '-',
                    $row_data['menstruasi'] ?? '-',
                    $row_data['hamil'] ?? '-',
                    $row_data['keterangan_sehat'] ?? '-',
                    $row_data['saran_mcu'] ?? '-',
                    $statusKesehatan,
                    $row_data['kesimpulan_anamnesis'] ?? '-',
                    // Pemeriksaan Fisik
                    // $sistolik, //  hasil pemisahan
                    // $diastolik, // hasil pemisahan
                    $row_data['tensi'] ?? '-', //sistolik
                    $row_data['diastolik'] ?? '-', //diastolik
                    $row_data['map'] ?? '-',
                    $row_data['suhu_tubuh'] ?? '-',
                    $row_data['nadi'] ?? '-',
                    $row_data['laju_pernafasan'] ?? '-',
                    $row_data['spo2'] ?? '-',
                    $tinggi_badan, 
                    $berat_badan, 
                    $row_data['lingkar_pinggang'] ?? '-',
                    $row_data['index_masa_tubuh'] ?? '-',
                    $row_data['klasifikasi_imt'] ?? '-',
                    $kondisiumum, // Kondisi Umum
                    $kesadaran, // Kesadaran Umum
                    $row_data['kepala'] ?? '-',
                    $row_data['visus'] ?? '-',
                    $row_data['pupil'] ?? '-',
                    $row_data['segmen_anterior'] ?? '-',
                    $row_data['segmen_posterior'] ?? '-',
                    $row_data['tyroid'] ?? '-',
                    $row_data['jvp'] ?? '-',
                    $row_data['telinga'] ?? '-',
                    $row_data['hidung'] ?? '-',
                    $row_data['tenggorokan'] ?? '-',
                    $row_data['mulut'] ?? '-',
                    $row_data['gigi'] ?? '-',
                    $row_data['kelenjar'] ?? '-',
                    $row_data['jantung'] ?? '-',
                    $row_data['paru'] ?? '-',
                    $row_data['perut'] ?? '-',
                    $row_data['alat_kelamin'] ?? '-',
                    $row_data['anus_rektum'] ?? '-',
                    $row_data['gerak_punggung'] ?? '-', // Anggota Gerak & Punggung
                    $row_data['reflex'] ?? '-',
                    $row_data['sensibilitas'] ?? '-',
                    $row_data['kesimpulan_fisik'] ?? '-',
                    // Pemeriksaan Radiologi
                    $row_data['kesimpulan_rad'] ?? '-',
                    $row_data['kesan'] ?? '-', // Kesan Thorax
                    $row_data['assesmen_rad'] ?? '-', // Kesan USG
                    // Pemeriksaan Lab
                    $row_data['kesimpulan_darah'] ?? '-',
                    $row_data['kesimpulan_urine'] ?? '-',
                    $row_data['kesimpulan_darah_kimia'] ?? '-',
                    $row_data['kesimpulan_tumor_marker'] ?? '-',
                    $row_data['kesimpulan_faeses'] ?? '-',
                    //Pemeriksaan EKG
                    $row_data['kesimpulan_ekg'] ?? '-',
                    $row_data['saran_ekg'] ?? '-',
                    $row_data['hasil_ekg'] ?? '-',
                    //Pemeriksaan Treadmill
                    $row_data['kesimpulan_treadmill'] ?? '-',
                    $row_data['saran_treadmill'] ?? '-',
                    $row_data['hasil_treadmill'] ?? '-',
                    $row_data['kesimpulan_audiometri'] ?? '-',
                    $row_data['saran_audio'] ?? '-',
                    $row_data['kesimpulan_test_rockpot'] ?? '-',
                    $row_data['kesimpulan_srq20'] ?? '-',
                    $row_data['kesimpulan_sds'] ?? '-',
                    $row_data['kesimpulan_skj'] ?? '-',
                    //Pemeriksaan Spirometri
                    $row_data['kesimpulan_spirometri2'] ?? '-',
                    $row_data['saran_spirometri'] ?? '-',
                    $row_data['hasil_spirometri'] ?? '-'
                ];

                // Tambahkan data lab dinamis
                foreach($lab_headers as $lab_header){
                    $excel_row[] = $row_data[$lab_header];
                }

                $sheet->fromArray($excel_row, NULL, 'A' . $row_num);
                $row_num++;
            }

            header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
            header('Content-Disposition: attachment;filename="Report_Hasil_MCU_ALL DATA.xlsx"');
            header('Cache-Control: max-age=0');

            $writer = new \PhpOffice\PhpSpreadsheet\Writer\Xlsx($spreadsheet);
            $writer->save('php://output');
            exit();
        }
    }

     private function process_and_merge_data($data_utama, $pivoted_labs, $lab_headers) {
        $data_gabungan = [];
        foreach ($data_utama as $item) {
            $kd_registrasi_saat_ini = $item['kd_registrasi'];
    
            // Gabungkan data lab
            foreach ($lab_headers as $header) {
                $item[$header] = isset($pivoted_labs[$kd_registrasi_saat_ini][$header]) ? $pivoted_labs[$kd_registrasi_saat_ini][$header] : '-';
            }
    
            // --- LOGIKA DIPERBARUI: Proses pemisahan Kesan Thorax dan USG ---
            if (isset($item['kesan'])) {
                $kesan_string = $item['kesan'];
    
                // Cek dan hapus semicolon di awal jika ada untuk membersihkan data
                if (substr(trim($kesan_string), 0, 1) === ';') {
                    $kesan_string = ltrim(trim($kesan_string), ';');
                    $kesan_string = trim($kesan_string);
                }
    
                // Lakukan pemisahan berdasarkan semicolon
                if (strpos($kesan_string, ';') !== false) {
                    // Pisahkan string berdasarkan semicolon pertama, maksimal 2 bagian
                    $parts = explode(';', $kesan_string, 2);
                    $item['kesan'] = trim($parts[0]); // Update nilai untuk 'Kesan Thorax'
                    $item['assesmen_rad'] = trim($parts[1]); // Set/overwrite nilai untuk 'Kesan USG'
                } else {
                    // Jika tidak ada semicolon, seluruh string adalah milik 'kesan'
                    $item['kesan'] = trim($kesan_string);
                    // Pastikan 'assesmen_rad' menggunakan nilai aslinya jika ada, atau kosong jika tidak.
                    $item['assesmen_rad'] = $item['assesmen_rad'] ?? '-';
                }
            }
    
            $data_gabungan[] = $item;
        }
        return $data_gabungan;
    }





     public function downloaddatamcu1()
    {
        // Menggunakan metode input CodeIgniter
        $tanggalawal = $this->input->get('TANGGAL_AWAL');
        $tanggalakhir = $this->input->get('TANGGAL_AKHIR');
        $kdgrupmcu = $this->input->get('KD_GROUP_MCU');

        if ($tanggalawal && $tanggalakhir && $kdgrupmcu) {
            $tanggal_awal = date('d/m/Y', strtotime($tanggalawal));
            $tanggal_akhir = date('d/m/Y', strtotime($tanggalakhir));

             // --- Proses data sama seperti di datareportmcu ---
            $pivoted_labs = [];
            $lab_headers = [];
            $response_lab = $this->fetch_api_data('http://103.255.241.146/api/service_rs/tampil_hasil_mcu_lab', $tanggal_awal, $tanggal_akhir, $kdgrupmcu);
            
            if ($response_lab) {
                foreach ($response_lab as $lab_item) {
                    if (!empty($lab_item['nm_detail_periksa'])) {
                        
                        $nama_detail = $lab_item['nm_detail_periksa'];
                        $nama_periksa = $lab_item['nm_periksa'];

                        // --- PENANGANAN KHUSUS UNTUK DUPLIKAT (SESUAI PERMINTAAN) ---
                        // Untuk 'Leukosit', hanya ambil yang nm_periksa-nya juga 'Leukosit'
                        if (strcasecmp($nama_detail, 'Leukosit') == 0) {
                            if (strcasecmp($nama_periksa, 'Leukosit') != 0) {
                                continue; // Abaikan item ini (misal: Leukosit dari Urine)
                            }
                        }
                        // Terapkan logika yang sama untuk 'Eritrosit'
                        if (strcasecmp($nama_detail, 'Eritrosit') == 0) {
                            if (strcasecmp($nama_periksa, 'Eritrosit') != 0) {
                                continue; // Abaikan item ini (misal: Eritrosit dari Urine)
                            }
                        }
                        // --- AKHIR PENANGANAN KHUSUS ---

                        $kd_reg = $lab_item['kd_registrasi'];
                        $nama_pemeriksaan = $nama_detail; // Tetap gunakan nm_detail_periksa sebagai header
                        $nilai_hasil = $lab_item['nilai_hasil'];
                        $pivoted_labs[$kd_reg][$nama_pemeriksaan] = $nilai_hasil;
                        if (!in_array($nama_pemeriksaan, $lab_headers)) {
                            $lab_headers[] = $nama_pemeriksaan;
                        }
                    }
                }
            }
            //sort($lab_headers);

              // --- LOGIKA URUTAN KOLOM LAB KUSTOM ---
            $custom_lab_order = [
                'HEMOGLOBIN', 'LEUKOSIT', 'HEMATOKRIT', 'ERITROSIT', 'TROMBOSIT', 'MCV', 'MCH', 'MCHC', 'RDW-CV', 'MPV', 'BASOFIL', 'EOSINOFIL', 'BATANG', 'SEGMEN', 'LIMSOFIT', 'MONOSIT', 'NETROFIL', 'TOTAL LIMSOFIT', 'NLR', 'LED 1', 'LED 2',
                'GLUKOSA PUASA STIK', 'GLUKOSA 2 JAM PP STIK', 'SGOT', 'SGPT', 'CHOLESTEROL TOTAL', 'Triglycerida', 'HDL CHOLESTEROL', 'LDL CHOLESTEROL', 'UREUM DARAH', 'CREATINE DARAH', 'ASAM URAT STIK',
                'HBS AG',
                'WARNA', 'BAU BERAT JENIS', 'PH', 'GLUKOSA', 'PROTEIN URINE', 'BILIRUBIN', 'UROBILLINOGEN', 'DARAH', 'KETON', 'NITRIT', 'LEUKOSIT ESTERASE', 'ERITROSIT', 'LEUKOSIT', 'SILINDER', 'GRANULA', 'EPITEL', 'KRISTAL', 'PARASIT', 'BAKTERI', 'SEL RAGI'
            ];

            usort($lab_headers, function($a, $b) use ($custom_lab_order) {
                $pos_a = array_search(strtoupper($a), $custom_lab_order);
                $pos_b = array_search(strtoupper($b), $custom_lab_order);
            
                if ($pos_a === false && $pos_b === false) { return $a <=> $b; } // Keduanya tidak ada di daftar, urutkan alfabetis
                if ($pos_a === false) { return 1; } // A tidak ada di daftar, letakkan di akhir
                if ($pos_b === false) { return -1; } // B tidak ada di daftar, letakkan di akhir
                return $pos_a <=> $pos_b; // Keduanya ada di daftar, urutkan berdasarkan posisi
            });
            // --- AKHIR LOGIKA URUTAN KUSTOM ---

            $data_utama = $this->fetch_api_data('http://103.255.241.146/api/service_rs/tampil_hasil_mcu', $tanggal_awal, $tanggal_akhir, $kdgrupmcu);
            
            if ($data_utama === null) {
                echo "Gagal mengambil data MCU utama atau format tidak sesuai.";
                return;
            }


            // --- LANGKAH 3: Gabungkan dan Proses data ---
            $data_gabungan = $this->process_and_merge_data($data_utama, $pivoted_labs, $lab_headers);

            // --- Tulis ke Excel ---
            require_once APPPATH . '../vendor/autoload.php';
            $spreadsheet = new \PhpOffice\PhpSpreadsheet\Spreadsheet();
            $sheet = $spreadsheet->getActiveSheet();

            // --- HEADER BARU UNTUK EXCEL ---
            $static_headers = [
                
                
                'Nama Pelaksana Fisik', 'Kode Registrasi', 'Tanggal MCU', 'Nama Pasien', 'Usia', 'Jenis Kelamin', 'Kode Paket MCU',
                //Anamnesa
                'Keluhan Utama','Obat Yang Digunakan', 'Riwayat Penyakit', 'Riwayat Penyakit Keluarga', 'Riwayat Penyakit Terdahulu', 'Info lainya','Riwayat Operasi',
                // Pemeriksaan Dokter Umum 
                'Status Perokok','Jumlah Rokok','Kebiasaan Alkohol','Status Olahraga','Puasa 8-12 jam','Kaca Mata', 'Buta Warna','Durasi Tidur','Bebas paparan bising', 'Minum obat terakhir', 'Menstruasi', 'Sedang Hamil',
                //Keterangan Sehat 
                'Catatan', 'Saran', 'Status Kesehatan',
                //Kesimpulan Anamnesa
                'Kesimpulan Anamnesis',
                // Pemeriksaan Fisik
                'Sistolik', 'Diastolik', 'MAP', 'Suhu', 'Nadi', 'Laju Pernafasan', 'SpO2', 'Tinggi', 'Berat Badan', 'Index Masa Tubuh (IMT)', 'Klasifikasi IMT', 'Kondisi Umum', 'Kesadaran Umum', 'Kepala Leher', 'Visus', 'Pupil', 'Segmen Anterior', 'Segmen Posterior', 
                'Tyroid', 'JVP', 'Telinga', 'Hidung', 'Tenggorokan', 'Mulut', 'Gigi','Kelenjar','Jantung', 'Paru-paru', 'Perut',  'Alat Kelamin', 'Anus dan Rektum', 'Anggota Gerak & Punggung', 'Reflek', 'Sensibilitas','Kesimpulan Fisik',

                // Pemeriksaan Radiologi
                'Kesimpulan Radiologi', 'Kesan Thorax', 'Kesan USG',
                // Pemeriksaan Lab
                'Kesimpulan Darah', 'Kesimpulan Urine', 'Kesimpulan Darah Kimia', 'Kesimpulan Tumor Marker', 'Kesimpulan Fases',
                //Pemeriksaan EKG
                'Kesimpulan EKG', 'Saran EKG', 'Hasil EKG',
                //Pemesiksaan Treadmill
                'Kesimpulan Treadmill', 'Saran Treadmill','Hasil Treadmill',
                //Pemeriksaan Spirometri
                'Kesimpulan Spirometri', 'Saran Spirometri','Hasil Spirometri'
            ];
            $final_headers = array_merge($static_headers, $lab_headers);
            
            $sheet->fromArray($final_headers, NULL, 'A1');

            $row_num = 2;
            foreach($data_gabungan as $row_data) {
                // Proses jenis kelamin
                $jenisKelamin = '';
                if (!empty($row_data['alamat_kantor'])) {
                    $lines = preg_split("/\r\n|\n|\r/", $row_data['alamat_kantor']);
                    if (isset($lines[2])) {
                        $parts = explode('/', $lines[2]);
                        $jenisKelamin = trim($parts[0]);
                    }
                }
                if (empty($jenisKelamin) && !empty($row_data['jenis_kelamin'])) {
                    $jenisKelamin = $row_data['jenis_kelamin'];
                }

                 // --- PENAMBAHAN LOGIKA BARU UNTUK STATUS KESEHATAN ---
                $statusKesehatan = '-'; // Nilai default
                if (isset($row_data['is_sehat'])) {
                    if ($row_data['is_sehat'] == 'T') {
                        $statusKesehatan = 'Sehat';
                    } elseif ($row_data['is_sehat'] == 'T') {
                        $statusKesehatan = 'Tidak Sehat';
                    }
                }

                // --- PENAMBAHAN LOGIKA BARU UNTUK KONDISI UMUM ---
                $kondisiumum = '-'; // Nilai default
                if (isset($row_data['is_baik'])) {
                    if ($row_data['is_baik'] == 'T') {
                        $kondisiumum = 'Baik';
                    } elseif ($row_data['is_tampak_sakit'] == 'T') {
                        $kondisiumum = 'Tampak Sakit';
                    } elseif ($row_data['is_pucat'] == 'T') {
                        $kondisiumum = 'Pucat';
                    } elseif ($row_data['is_lemah'] == 'T') {
                        $kondisiumum = 'Lemah';
                    } elseif ($row_data['is_kejang'] == 'T') {
                        $kondisiumum = 'Kejang';
                    }
                }

                // --- PENAMBAHAN LOGIKA BARU UNTUK KESADARAN ---
                $kesadaran = '-'; // Nilai default
                if (isset($row_data['is_composmentis'])) {
                    if ($row_data['is_composmentis'] == 'T') {
                        $kesadaran = 'Composmentis';
                    } elseif ($row_data['is_apatis'] == 'T') {
                        $kesadaran = 'Apatis';
                    } elseif ($row_data['is_somnolen'] == 'T') {
                        $kesadaran = 'Somnolen';
                    } elseif ($row_data['is_soporocoma'] == 'T') {
                        $kesadaran = 'Soporocoma';
                    } 
                }

                
                // --- LOGIKA BARU UNTUK STATUS ROKOK ---
                $status_perokok = '-'; // Nilai default
                if (isset($row_data['is_tidak_rokok'])) {
                    if ($row_data['is_tidak_rokok'] == 'T') {
                        $status_perokok = 'Tidak Merokok';
                    } elseif ($row_data['is_mantan_rokok'] == 'T') {
                        $status_perokok = 'Mantan Perokok';
                    } elseif ($row_data['is_sesekali_rokok_elektrik'] == 'T') {
                        $status_perokok = 'Pengguna sesekali rokok elektrik';
                    } elseif ($row_data['is_dual_user_rokok'] == 'T') {
                        $status_perokok = 'Dual User: Rokok Konvensional & Elektrik';
                    } elseif ($row_data['is_rokok_konvensional'] == 'T') {
                        $status_perokok = 'Pengguna Rokok Konvensional';
                    } 
                }


                // ---  LOGIKA BARU UNTUK JUMLAH ROKOK ---
                $jumlah_rokok = '-'; // Nilai default
                if (isset($row_data['is_1_10_rokok'])) {
                    if ($row_data['is_1_10_rokok'] == 'T') {
                        $jumlah_rokok = '1 - 10 Batang perhari';
                    } elseif ($row_data['is_11_20_rokok'] == 'T') {
                        $jumlah_rokok = '11 - 20 Batang perhari';
                    } elseif ($row_data['is_21_30_rokok'] == 'T') {
                        $jumlah_rokok = '21 - 30 Batang perhari';
                    } elseif ($row_data['is_lebih_30_rokok'] == 'T') {
                        $jumlah_rokok = '> 30 Batang perhari';
                    } 
                }

                // ---  LOGIKA  UNTUK  KEBIASAAN ALKOHOL ---
                $status_alkohol = '-'; // Nilai default
                if (isset($row_data['is_tidak_alkohol'])) {
                    if ($row_data['is_tidak_alkohol'] == 'T') {
                        $status_alkohol = 'Tidak Pernah';
                    } elseif ($row_data['is_sesekali_alkohol'] == 'T') {
                        $status_alkohol = 'Sesekali';
                    } elseif ($row_data['is_mantan_candu_alkohol'] == 'T') {
                        $status_alkohol = 'Mantan pecandu alkohol';
                    } elseif ($row_data['is_alkohol_setiap_hari'] == 'T') {
                        $status_alkohol = 'Konsumsi alkohol setiap hari';
                    } elseif ($row_data['is_alkohol_setiap_minggu'] == 'T') {
                        $status_alkohol = 'Konsumsi alkohol setiap minggu';
                    } elseif  ($row_data['is_alkohol_setiap_bulan'] == 'T') {
                        $status_alkohol = 'Konsumsi alkohol setiap bulan';
                    }
                }

                // ---  LOGIKA BARU UNTUK STATUS OLAHRAGA ---
                $status_olahraga = '-'; // Nilai default
                if (isset($row_data['is_olahraga_cukup'])) {
                    if ($row_data['is_olahraga_kurang'] == 'T') {
                        $status_olahraga = '1 - 10 Batang perhari';
                    } elseif ($row_data['is_olahraga_cukup'] == 'T') {
                        $status_olahraga = '11 - 20 Batang perhari';
                    } elseif ($row_data['is_olahraga_lebih'] == 'T') {
                        $status_olahraga = '21 - 30 Batang perhari';
                    } 
                }

                // --- PENAMBAHAN: Logika pemisah Tinggi & Berat Badan ---
                $tinggi_badan = '-';
                $berat_badan = '-';
                $tbbbString = $row_data['tbbb'] ?? ''; // Ambil data tbbb
                if (!empty($tbbbString) && is_string($tbbbString) && strpos($tbbbString, '/') !== false) {
                    $parts_tbbb = explode('/', $tbbbString);
                    if (count($parts_tbbb) === 2) {
                        $tinggi_val = trim($parts_tbbb[0]);
                        $berat_val = trim($parts_tbbb[1]);
                        if ($tinggi_val !== '') {
                            $tinggi_badan = $tinggi_val;
                        }
                        if ($berat_val !== '') {
                            $berat_badan = $berat_val;
                        }
                    }
                }
                // --- Akhir logika pemisah Tinggi & Berat Badan ---



                // --- DATA BARU UNTUK EXCEL ---
                $excel_row = [
                      $row_data['nm_pelaksana_fisik'] ?? '-',
                    $row_data['kd_registrasi'] ?? '-',
                    $row_data['tgl_mcu'] ?? '-',
                    $row_data['nm_pasien'] ?? '-',
                    $row_data['usia'] ?? '-',
                    //$row_data['jenis_kelamin'] ?? '-',
                    $jenisKelamin,
                    $row_data['kd_paket_mcu'] ?? '-',
                    //anamnesis
                    $row_data['keluhan'] ?? '-',
                    $row_data['obat_digunakan'] ?? '-',
                    $row_data['riwayat_penyakit'] ?? '-',
                    $row_data['riwayat_penyakit_keluarga'] ?? '-',
                    $row_data['riwayat_penyakit_terdahulu'] ?? '-',
                    $row_data['lain_lain'] ?? '-',
                    $row_data['nama_operasi'] ?? '-',
                    $status_perokok,
                    $jumlah_rokok,
                    $status_alkohol,
                    //$status_olahraga,
                    $row_data['olahraga'] ?? '-',
                    $row_data['puasa'] ?? '-',
                    $row_data['kaca_mata'] ?? '-',
                    $row_data['buta_warna'] ?? '-',
                    $row_data['durasi_tidur'] ?? '-',
                    $row_data['paparan_bising'] ?? '-',
                    $row_data['obat_terakhir'] ?? '-',
                    $row_data['menstruasi'] ?? '-',
                    $row_data['hamil'] ?? '-',
                    $row_data['keterangan_sehat'] ?? '-',
                    $row_data['saran_mcu'] ?? '-',
                    $statusKesehatan,
                    $row_data['kesimpulan_anamnesis'] ?? '-',
                    // Pemeriksaan Fisik
                    // $sistolik, //  hasil pemisahan
                    // $diastolik, // hasil pemisahan
                    $row_data['tensi'] ?? '-', //sistolik
                    $row_data['diastolik'] ?? '-', //diastolik
                    $row_data['map'] ?? '-',
                    $row_data['suhu_tubuh'] ?? '-',
                    $row_data['nadi'] ?? '-',
                    $row_data['laju_pernafasan'] ?? '-',
                    $row_data['spo2'] ?? '-',
                    $tinggi_badan, 
                    $berat_badan, 
                    $row_data['index_masa_tubuh'] ?? '-',
                    $row_data['klasifikasi_imt'] ?? '-',
                    $kondisiumum, // Kondisi Umum
                    $kesadaran, // Kesadaran Umum
                    $row_data['kepala'] ?? '-',
                    $row_data['visus'] ?? '-',
                    $row_data['pupil'] ?? '-',
                    $row_data['segmen_anterior'] ?? '-',
                    $row_data['segmen_posterior'] ?? '-',
                    $row_data['tyroid'] ?? '-',
                    $row_data['jvp'] ?? '-',
                    $row_data['telinga'] ?? '-',
                    $row_data['hidung'] ?? '-',
                    $row_data['tenggorokan'] ?? '-',
                    $row_data['mulut'] ?? '-',
                    $row_data['gigi'] ?? '-',
                    $row_data['kelenjar'] ?? '-',
                    $row_data['alat_kelamin'] ?? '-',
                    $row_data['jantung'] ?? '-',
                    $row_data['paru'] ?? '-',
                    $row_data['perut'] ?? '-',
                    $row_data['anus_rektum'] ?? '-',
                    $row_data['gerak_punggung'] ?? '-', // Anggota Gerak & Punggung
                    $row_data['reflex'] ?? '-',
                    $row_data['sensibilitas'] ?? '-',
                    $row_data['kesimpulan_fisik'] ?? '-',
                    // Pemeriksaan Radiologi
                    $row_data['kesimpulan_rad'] ?? '-',
                    $row_data['kesan'] ?? '-', // Kesan Thorax
                    $row_data['assesmen_rad'] ?? '-', // Kesan USG
                    // Pemeriksaan Lab
                    $row_data['kesimpulan_darah'] ?? '-',
                    $row_data['kesimpulan_urine'] ?? '-',
                    $row_data['kesimpulan_darah_kimia'] ?? '-',
                    $row_data['kesimpulan_tumor_marker'] ?? '-',
                    $row_data['kesimpulan_faeses'] ?? '-',
                    //Pemeriksaan EKG
                    $row_data['kesimpulan_ekg'] ?? '-',
                    $row_data['saran_ekg'] ?? '-',
                    $row_data['hasil_ekg'] ?? '-',
                    //Pemeriksaan Treadmill
                    $row_data['kesimpulan_treadmill'] ?? '-',
                    $row_data['saran_treadmill'] ?? '-',
                    $row_data['hasil_treadmill'] ?? '-',
                    //Pemeriksaan Spirometri
                    $row_data['kesimpulan_spirometri'] ?? '-',
                    $row_data['saran_spirometri'] ?? '-',
                    $row_data['hasil_spirometri'] ?? '-'

                    
                ];

                // Tambahkan data lab dinamis
                foreach($lab_headers as $lab_header){
                    $excel_row[] = $row_data[$lab_header];
                }

                $sheet->fromArray($excel_row, NULL, 'A' . $row_num);
                $row_num++;
            }

            header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
            header('Content-Disposition: attachment;filename="Report_Hasil_MCU.xlsx"');
            header('Cache-Control: max-age=0');

            $writer = new \PhpOffice\PhpSpreadsheet\Writer\Xlsx($spreadsheet);
            $writer->save('php://output');
            exit();
        }
    }


    public function referensigrupmcu()
    {
        $curl = curl_init();

        curl_setopt_array($curl, array(
            CURLOPT_URL => 'http://103.255.241.146/api/service_rs/ref_md_group_mcu',
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_ENCODING => '',
            CURLOPT_MAXREDIRS => 10,
            CURLOPT_TIMEOUT => 0, // Waktu tunggu permintaan selama 30 detik
            CURLOPT_FOLLOWLOCATION => true,
            CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
            // Metode diatur ke POST sesuai kebutuhan API backend
            CURLOPT_CUSTOMREQUEST => 'POST',
            // Mengirim body kosong secara eksplisit menggunakan sintaks array() yang kompatibel
            CURLOPT_POSTFIELDS => array(),
        ));

        $response = curl_exec($curl);
        $err = curl_error($curl); // Menangkap error dari cURL jika ada

        curl_close($curl);

        // Selalu atur header Content-Type agar browser tahu ini adalah JSON
        header('Content-Type: application/json');

        if ($err) {
            // Jika terjadi error pada cURL (misal: tidak bisa terhubung ke API)
            echo json_encode(['error' => 'Gagal terhubung ke server API eksternal: ' . $err]);
        } elseif ($response) {
            // Cek apakah respons adalah JSON yang valid sebelum dikirim
            json_decode($response);
            if (json_last_error() !== JSON_ERROR_NONE) {
                echo json_encode(['error' => 'Respons dari API eksternal bukan JSON yang valid.']);
            } else {
                // Kirimkan kembali data JSON yang benar dari API
                echo $response;
            }
        } else {
            // Jika tidak ada respons sama sekali dari API
            echo json_encode(['error' => 'Tidak ada respons dari server API eksternal.']);
        }
    }
}
