<?php

namespace App\Controllers;

use App\Controllers\BaseController;
use App\Models\PeminjamanModel;
use App\Models\AnggotaModel;
use App\Models\BukuModel;


class Peminjaman extends BaseController
{

    protected $pinjam;
    protected $anggota;
    protected $buku;



    public function __construct()
    {
        $this->pinjam  = new PeminjamanModel();
        $this->anggota = new AnggotaModel();
        $this->buku    = new BukuModel();
    }





    // =========================
    // DATA PEMINJAMAN
    // =========================

    public function index()
    {

        $data = [

            'anggota' => $this->anggota->findAll(),

            'buku' => $this->buku->findAll(),


            'pinjam' => $this->pinjam

                ->select('
                    MIN(peminjaman.id) as id,
                    kode_pinjam,
                    anggota.nama,
                    tanggal_pinjam,
                    tanggal_kembali,
                    status,
                    COUNT(peminjaman.id) as jumlah_buku
                ')

                ->join(
                    'anggota',
                    'anggota.id = peminjaman.anggota_id'
                )

                ->groupBy('kode_pinjam')

                ->orderBy(
                    'tanggal_pinjam',
                    'DESC'
                )

                ->findAll()

        ];



        return view(
            'peminjaman/index',
            $data
        );

    }








    // =========================
    // SIMPAN PEMINJAMAN
    // =========================

    public function store()
    {


        $anggota_id = $this->request
            ->getPost('anggota_id');



        $buku_ids = $this->request
            ->getPost('buku_id');





        if (!$anggota_id) {


            return redirect()
                ->back()
                ->with(
                    'error',
                    'Anggota belum dipilih'
                );

        }






        if (!$buku_ids || !is_array($buku_ids)) {


            return redirect()
                ->back()
                ->with(
                    'error',
                    'Silakan pilih minimal satu buku'
                );

        }







        // kode transaksi

        $kode_pinjam = 'PJM' . date('YmdHis');







        foreach ($buku_ids as $buku_id) {


            $buku = $this->buku
                ->find($buku_id);





            if (!$buku) {

                continue;

            }






            // cek stok

            if ($buku['stok'] <= 0) {

                continue;

            }







            // simpan data peminjaman

            $this->pinjam->insert([


                'kode_pinjam' => $kode_pinjam,


                'anggota_id' => $anggota_id,


                'buku_id' => $buku_id,



                'tanggal_pinjam' => $this->request
                    ->getPost('tanggal_pinjam'),



                'tanggal_kembali' => $this->request
                    ->getPost('tanggal_kembali'),



                'status' => 'Dipinjam',



                'denda' => 0


            ]);







            // kurangi stok buku

            $this->buku->update(

                $buku_id,

                [

                    'stok' => $buku['stok'] - 1

                ]

            );



        }







        return redirect()
            ->to('/peminjaman')
            ->with(
                'success',
                'Peminjaman berhasil disimpan'
            );


    }









    // =========================
    // FORM EDIT
    // =========================

    public function edit($id)
    {


        $pinjam = $this->pinjam
            ->find($id);




        if (!$pinjam) {


            return redirect()
                ->to('/peminjaman')
                ->with(
                    'error',
                    'Data tidak ditemukan'
                );

        }





        $data = [


            'pinjam' => $pinjam,


            'anggota' => $this->anggota
                ->findAll(),


            'buku' => $this->buku
                ->findAll()


        ];





        return view(
            'peminjaman/edit',
            $data
        );


    }









    // =========================
    // UPDATE DATA
    // =========================

    public function update($id)
    {


        $this->pinjam->update(

            $id,

            [

                'anggota_id' => $this->request
                    ->getPost('anggota_id'),


                'buku_id' => $this->request
                    ->getPost('buku_id'),



                'tanggal_pinjam' => $this->request
                    ->getPost('tanggal_pinjam'),



                'tanggal_kembali' => $this->request
                    ->getPost('tanggal_kembali'),



                'status' => $this->request
                    ->getPost('status')


            ]

        );





        return redirect()
            ->to('/peminjaman')
            ->with(
                'success',
                'Data peminjaman berhasil diperbarui'
            );


    }









    // =========================
    // HAPUS DATA
    // =========================

    public function delete($id)
    {


        $data = $this->pinjam
            ->find($id);




        if ($data) {


            $buku = $this->buku
                ->find($data['buku_id']);




            if ($buku) {


                $this->buku->update(

                    $buku['id'],

                    [

                        'stok' => $buku['stok'] + 1

                    ]

                );

            }





            $this->pinjam
                ->delete($id);


        }






        return redirect()
            ->to('/peminjaman')
            ->with(
                'success',
                'Data peminjaman berhasil dihapus'
            );


    }



}