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

class Icdrawatjalan extends CI_Controller
{
    /**
     * Method untuk mengambil dan menggabungkan data dari dua API ICD
     * untuk ditampilkan di tabel frontend.
     */
    public function tampildataicd()
     {
        $tanggalawal = $this->input->post('TANGGAL_AWAL');
        $tanggalakhir = $this->input->post('TANGGAL_AKHIR');

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

            // --- Panggil API Detail Pasien ICD ---
            // CATATAN: Pastikan endpoint 'icd_detail_report' ini sudah benar.
            $detail_url = 'http://103.255.241.146/api/service_rs/icd_detail';
            $detail_data = $this->fetch_api_data($detail_url, $tanggal_awal, $tanggal_akhir);

            // --- Panggil API Persentase/Summary ICD ---
            $summary_url = 'http://103.255.241.146/api/service_rs/icd_prosentase';
            $summary_response = $this->fetch_api_data($summary_url, $tanggal_awal, $tanggal_akhir);
            // Ambil baris pertama dari summary, karena data ini sama untuk semua
            $summary_data = is_array($summary_response) && !empty($summary_response) ? $summary_response[0] : null;
            
            // Siapkan respons akhir dalam format terpisah untuk view
            $final_response = [
                'response' => [
                    'detail' => $detail_data,
                    'summary' => $summary_data
                ]
            ];

            header('Content-Type: application/json');
            echo json_encode($final_response);

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

    /**
     * Method untuk men-download laporan ICD dalam format Excel.
     */
   public function unduhdatapersentase()
    {
        $tanggalawal = $this->input->get('TANGGAL_AWAL');
        $tanggalakhir = $this->input->get('TANGGAL_AKHIR');

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

            $summary_url = 'http://103.255.241.146/api/service_rs/icd_prosentase';
            $summary_response = $this->fetch_api_data($summary_url, $tanggal_awal, $tanggal_akhir);
            $summary_data = is_array($summary_response) && !empty($summary_response) ? $summary_response[0] : null;

            if ($summary_data === null) {
                echo "Gagal mengambil data ringkasan untuk diunduh.";
                return;
            }

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

            $headers = ["Total Pasien", "Coding RM", "% Coding RM", "Coding Dokter", "% Coding Dokter", "Tidak Terisi", "% Tidak Terisi", "Total %"];
            $sheet->fromArray($headers, NULL, 'A1');

            $excel_row = [
                $summary_data['total_pasien'] ?? '-',
                $summary_data['coding_rm'] ?? '-',
                $summary_data['prosentase_coding_rekam_medis'] ?? '-',
                $summary_data['coding_dokter'] ?? '-',
                $summary_data['prosentase_coding_dokter'] ?? '-',
                $summary_data['tidak_terisi'] ?? '-',
                $summary_data['prosentase_tidak_terisi'] ?? '-',
                $summary_data['total_prosentase'] ?? '-',
            ];
            $sheet->fromArray($excel_row, NULL, 'A2');

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

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

    /**
     * Method BARU untuk men-download laporan detail ICD dalam format Excel.
     */
    public function unduhdatadetail()
    {
        $tanggalawal = $this->input->get('TANGGAL_AWAL');
        $tanggalakhir = $this->input->get('TANGGAL_AKHIR');

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

            $detail_url = 'http://103.255.241.146/api/service_rs/icd_detail';
            $detail_data = $this->fetch_api_data($detail_url, $tanggal_awal, $tanggal_akhir);

            if ($detail_data === null) {
                echo "Gagal mengambil data detail untuk diunduh.";
                return;
            }

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

            $headers = ["Kode Registrasi","Nama Pasien", "Pembayaran", "DX Primer", "DX Sekunder", "Petugas", "Dokter", "Poliklinik", "Waktu"];
            $sheet->fromArray($headers, NULL, 'A1');

            $row_num = 2;
            foreach($detail_data as $row_data) {
                $excel_row = [
                    $row_data['kd_registrasi'] ?? '-',
                    $row_data['nm_pasien'] ?? '-',
                    $row_data['nm_pembayaran'] ?? '-',
                    $row_data['dx_primer'] ?? '-',
                    $row_data['dx_sekunder'] ?? '-',
                    $row_data['petugas'] ?? '-',
                    $row_data['nm_dokter'] ?? '-',
                    $row_data['nm_poliklinik'] ?? '-',
                    $row_data['waktu'] ?? '-',
                ];
                $sheet->fromArray($excel_row, NULL, 'A' . $row_num);
                $row_num++;
            }

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

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


    /**
     * Helper function untuk memanggil API.
     */
    private function fetch_api_data($url, $tanggal_awal, $tanggal_akhir)
    {
        $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
            ),
        ));
        $response = curl_exec($curl);
        curl_close($curl);

        if ($response) {
            $data = json_decode($response, true);
            if (json_last_error() === JSON_ERROR_NONE && isset($data['response'])) {
                return $data['response'];
            }
        }
        return null;
    }
}

