<?php

namespace App\Controllers;


use App\Models\ModelRekammedis;
use App\Models\ModelKunjungan;
use App\Models\ModelPasien;

class RekamMedis extends BaseController
{
    protected $modelRekammedis;
    protected $modelKunjungan;
    protected $modelPasien;

    public function __construct()
    {
        if (!session()->get('isLoggedIn')) {
            return redirect()->to('/login');
        }

        $this->modelRekammedis = new ModelRekammedis();
        $this->modelKunjungan = new ModelKunjungan();
        $this->modelPasien = new ModelPasien();
    }

    public function index()
    {
        $dataRekam = $this->modelRekammedis->getAllData(); // Buat method ini di model
        $dataPasien = $this->modelPasien->getAllData();
        $dataKunjungan = $this->modelKunjungan->getAllData();
        $dataBreadcumb = 'Rekam Medis';

        $data = [
            'Breadcumb' => $dataBreadcumb,
            'rekam_medis' => $dataRekam,
            'kunjungan' => $dataKunjungan,
            'pasien' => $dataPasien,
        ];

        return view('rekam_medis/index', $data);
    }


    public function getData($id_rekam_medis)
    {
        if ($this->request->isAJAX()) {
            $data = $this->modelRekammedis->find($id_rekam_medis); // Ambil data berdasarkan ID

            if ($data) {
                echo json_encode($data); // Kirim data ke frontend
            } else {
                echo json_encode(null);
            }
        }
    }

    public function tambahData()
    {
        if ($this->request->isAJAX()) {

            // Ambil data dari form
            $id_kunjungan      = $this->request->getVar('id_kunjungan');
            $keluhan           = $this->request->getVar('keluhan');
            $tekanan_darah     = $this->request->getVar('tekanan_darah');
            $denyut_nadi       = $this->request->getVar('denyut_nadi');
            $suhu_tubuh        = $this->request->getVar('suhu_tubuh');
            $laju_nafas        = $this->request->getVar('laju_nafas');
            $berat_badan       = $this->request->getVar('berat_badan');
            $tinggi_badan      = $this->request->getVar('tinggi_badan');
            $gigi_yang_dirawat = $this->request->getVar('gigi_yang_dirawat');
            $diagnosa          = $this->request->getVar('diagnosa');
            $terapi            = $this->request->getVar('terapi');
            $edukasi           = $this->request->getVar('edukasi');

            // Validasi data
            $errors = [];

            if (empty($id_kunjungan)) $errors[] = 'Kunjungan';
            if (empty($keluhan))      $errors[] = 'Keluhan';
            if (empty($diagnosa))     $errors[] = 'Diagnosa';

            if (!empty($errors)) {
                return $this->response->setJSON([
                    'status'  => 'error',
                    'message' => 'Field berikut harus diisi: ' . implode(', ', $errors)
                ]);
            }

            // Siapkan data rekam medis
            $data = [
                'id_kunjungan'      => $id_kunjungan,
                'keluhan'           => $keluhan,
                'tekanan_darah'     => $tekanan_darah,
                'denyut_nadi'       => $denyut_nadi,
                'suhu_tubuh'        => $suhu_tubuh,
                'laju_nafas'        => $laju_nafas,
                'berat_badan'       => $berat_badan,
                'tinggi_badan'      => $tinggi_badan,
                'gigi_yang_dirawat' => $gigi_yang_dirawat,
                'diagnosa'          => $diagnosa,
                'terapi'            => $terapi,
                'edukasi'           => $edukasi
            ];

            if ($this->modelRekammedis->tambahData($data)) {
                return $this->response->setJSON([
                    'status' => 'success',
                    'message' => 'Data Rekam Mediis berhasil ditambahkan'
                ]);
            } else {
                return $this->response->setJSON([
                    'status' => 'error',
                    'message' => 'Gagal menyimpan data ke database'
                ]);
            }
        }
    }

    public function updateData()
    {
        if ($this->request->isAJAX()) {
            $id_rekam_medis     = $this->request->getVar('id_rekam_medis');
            $id_kunjungan      = $this->request->getVar('id_kunjungan');
            $keluhan            = $this->request->getVar('keluhan');
            $tekanan_darah      = $this->request->getVar('tekanan_darah');
            $denyut_nadi        = $this->request->getVar('denyut_nadi');
            $suhu_tubuh         = $this->request->getVar('suhu_tubuh');
            $laju_nafas         = $this->request->getVar('laju_nafas');
            $berat_badan        = $this->request->getVar('berat_badan');
            $tinggi_badan       = $this->request->getVar('tinggi_badan');
            $gigi_yang_dirawat  = $this->request->getVar('gigi_yang_dirawat');
            $diagnosa           = $this->request->getVar('diagnosa');
            $terapi             = $this->request->getVar('terapi');
            $edukasi            = $this->request->getVar('edukasi');

            // Validasi data (cek field kosong)
            $errors = [];

            if (empty($keluhan))   $errors[] = 'Keluhan';
            if (empty($diagnosa))  $errors[] = 'Diagnosa';

            if (!empty($errors)) {
                $msg = [
                    'status' => 'error',
                    'message' => 'Field berikut harus diisi: ' . implode(', ', $errors)
                ];
                echo json_encode($msg);
                return;
            }

            // Siapkan data untuk update
            $data = [
                'id_kunjungan'      => $id_kunjungan,
                'keluhan'           => $keluhan,
                'tekanan_darah'     => $tekanan_darah,
                'denyut_nadi'       => $denyut_nadi,
                'suhu_tubuh'        => $suhu_tubuh,
                'laju_nafas'        => $laju_nafas,
                'berat_badan'       => $berat_badan,
                'tinggi_badan'      => $tinggi_badan,
                'gigi_yang_dirawat' => $gigi_yang_dirawat,
                'diagnosa'          => $diagnosa,
                'terapi'            => $terapi,
                'edukasi'           => $edukasi
            ];

            // Memanggil method updateData() dari model untuk insert data
            if ($this->modelRekammedis->updateData($id_rekam_medis, $data)) {
                $msg = ['status' => 'success', 'message' => 'Data Rekam Medis berhasil di update'];
            } else {
                $msg = ['error' => 'Terjadi kesalahan saat menambahkan data'];
            }

            echo json_encode($msg);
        }
    }

    public function deleteData()
    {
        if ($this->request->isAJAX()) {
            $id_rekam_medis = $this->request->getVar('id_rekam_medis');

            // Validasi
            if (!$id_rekam_medis) {
                return $this->response->setJSON([
                    'status' => 'error',
                    'message' => 'ID Rekam Medis tidak ditemukan dalam permintaan'
                ]);
            }

            // Ambil data rekam medis (join ke kunjungan, pasien, dan dokter untuk menampilkan info)
            $dataRekam = $this->modelRekammedis
                ->select('rekam_medis.*, pasien.nama_lengkap AS nama_pasien, dokter.nama_dokter')
                ->join('kunjungan', 'kunjungan.id_kunjungan = rekam_medis.id_kunjungan')
                ->join('pasien', 'pasien.id_pasien = kunjungan.id_pasien')
                ->join('dokter', 'dokter.id_dokter = kunjungan.id_dokter')
                ->where('rekam_medis.id_rekam_medis', $id_rekam_medis)
                ->first();

            if (!$dataRekam) {
                return $this->response->setJSON([
                    'status' => 'error',
                    'message' => "Data rekam medis dengan ID $id_rekam_medis tidak ditemukan"
                ]);
            }

            $namaPasien = $dataRekam['nama_pasien'] ?? 'Pasien Tidak Diketahui';
            $namaDokter = $dataRekam['nama_dokter'] ?? 'Dokter Tidak Diketahui';

            // Hapus data
            if ($this->modelRekammedis->delete($id_rekam_medis)) {
                return $this->response->setJSON([
                    'status'  => 'success',
                    'message' => "Data Rekam Medis untuk pasien \"$namaPasien\" oleh dokter \"$namaDokter\" berhasil dihapus"
                ]);
            } else {
                return $this->response->setJSON([
                    'status'  => 'error',
                    'message' => "Gagal menghapus data Rekam Medis"
                ]);
            }
        }

        // Jika bukan request AJAX
        return $this->response->setJSON([
            'status' => 'error',
            'message' => 'Akses tidak valid'
        ]);
    }
}
