<?php

namespace App\Controllers;

use App\Controllers\BaseController;
use App\Models\ModelPembayaran;
use App\Models\ModelDetailPembayaran;
use App\Models\ModelKunjungan;

class Pembayaran extends BaseController
{
    protected $ModelPembayaran;
    protected $ModelDetailPembayaran;
    protected $ModelKunjungan;

    public function __construct()
    {
        $this->ModelPembayaran        = new ModelPembayaran();
        $this->ModelDetailPembayaran = new ModelDetailPembayaran();
        $this->ModelKunjungan         = new ModelKunjungan(); // pastikan model ini sudah dibuat
    }

    public function index()
    {
        $data = [
            'Breadcumb' => 'Pembayaran',
            'pembayaran' => $this->ModelPembayaran->getAll(),
            'kunjungan' => $this->ModelKunjungan->getKunjunganYangMemilikiTindakanAtauResep(), // jika ingin menampilkan pilihan kunjungan
        ];
        return view('pembayaran/index', $data);
    }

    public function detail_ajax($id)
    {
        $pembayaran = $this->ModelPembayaran->getById($id);
        $detail     = $this->ModelDetailPembayaran->getByPembayaran($id);

        if (!$pembayaran) {
            return 'Data tidak ditemukan.';
        }

        return view('pembayaran/detail_pembayaran', [
            'pembayaran' => $pembayaran,
            'detail' => $detail,
        ]);
    }


    public function detail($id)
    {
        $data = [
            'Breadcumb' => 'Detail Pembayaran',
            'pembayaran' => $this->ModelPembayaran->getById($id),
            'detail' => $this->ModelDetailPembayaran->getByPembayaran($id),
        ];
        return view('pembayaran/detail', $data);
    }

    public function simpanPembayaran()
    {
        $id_kunjungan = $this->request->getPost('id_kunjungan');
        $metode = $this->request->getPost('metode_pembayaran');
        $keterangan = $this->request->getPost('keterangan');

        // Load model
        $modelTindakan = new \App\Models\ModelTindakan();
        $modelResepObat = new \App\Models\ModelResepObat();
        $modelPembayaran = new \App\Models\ModelPembayaran();
        $modelDetailPembayaran = new \App\Models\ModelDetailPembayaran();

        // Ambil tindakan untuk kunjungan ini
        $tindakanData = $modelTindakan->where('id_kunjungan', $id_kunjungan)
            ->join('master_tindakan', 'master_tindakan.id_tindakan = tindakan.id_tindakan')
            ->select('tindakan.id_tindakan, master_tindakan.nama_tindakan, master_tindakan.tarif')
            ->findAll();

        // Ambil resep untuk kunjungan ini
        $resepData = $modelResepObat->getDetailByKunjungan($id_kunjungan); // method tambahan dijelaskan di bawah

        $total = 0;
        $detail = [];

        // Detail tindakan
        foreach ($tindakanData as $t) {
            $detail[] = [
                'jenis_item' => 'tindakan',
                'id_item'    => $t['id_tindakan'],
                'nama_item'  => $t['nama_tindakan'],
                'jumlah'     => 1,
                'harga'      => $t['tarif'],
                'subtotal'   => $t['tarif'],
            ];
            $total += $t['tarif'];
        }

        // Detail resep
        foreach ($resepData as $r) {
            $subtotal = $r['jumlah'] * $r['harga'];
            $detail[] = [
                'jenis_item' => 'resep',
                'id_item'    => $r['id_obat'],
                'nama_item'  => $r['nama_obat'],
                'jumlah'     => $r['jumlah'],
                'harga'      => $r['harga'],
                'subtotal'   => $subtotal,
            ];
            $total += $subtotal;
        }

        // Simpan pembayaran
        $modelPembayaran->insert([
            'id_kunjungan' => $id_kunjungan,
            'tanggal_pembayaran' => date('Y-m-d'),
            'total_biaya' => $total,
            'metode_pembayaran' => $metode,
            'keterangan' => $keterangan,
        ]);

        $id_pembayaran = $modelPembayaran->getInsertID();

        // Simpan detail pembayaran
        foreach ($detail as $d) {
            $d['id_pembayaran'] = $id_pembayaran;
            $modelDetailPembayaran->insert($d);
        }

        return $this->response->setJSON(['status' => 'success']);
    }




    public function tambah()
    {
        $data = $this->request->getPost();
        $this->ModelPembayaran->tambahData($data);
        return redirect()->to('/pembayaran')->with('success', 'Data pembayaran berhasil ditambahkan.');
    }

    public function update($id)
    {
        $data = $this->request->getPost();
        $this->ModelPembayaran->updateData($id, $data);
        return redirect()->to('/pembayaran')->with('success', 'Data pembayaran berhasil diupdate.');
    }

    public function delete($id)
    {
        // Hapus semua detail dulu
        $this->ModelDetailPembayaran->deleteByPembayaran($id);
        // Lalu hapus pembayaran
        $this->ModelPembayaran->deleteData($id);
        return redirect()->to('/pembayaran')->with('success', 'Data pembayaran berhasil dihapus.');
    }
}
