<?php

namespace App\Models;

use CodeIgniter\Model;

class ModelPengajuanCuti extends Model

{
    protected $table            = 'pengajuancuti';
    protected $primaryKey       = 'id';
    protected $allowedFields    = [
        'id_user',
        'id_jenis',
        'tanggal_mulai',
        'tanggal_selesai',
        'keterangan',
        'status_supervisor',
        'catatan_supervisor',
        'status_manager',
        'catatan_manager',
        'status_admin',
        'alamat_selama_menjalankan_cuti',
        'golongan_ruang',
        'masa_kerja',
        'file_berkas',
    ];

    protected $useTimestamps    = true;
    protected $createdField     = 'created_at';
    protected $updatedField     = 'updated_at';
    /**
     * Fungsi untuk mendapatkan semua data lansia
     *
     * @return array
     */
    public function getAllData()
    {
        return $this->select('
            pengajuancuti.*, 
            users.nama AS nama, 
            users.nip, 
            jenis_cuti.nama_jenis, 
            jenis_cuti.jumlah_default
        ')
            ->join('users', 'users.id_user = pengajuancuti.id_user', 'left')
            ->join('jenis_cuti', 'jenis_cuti.id_jenis = pengajuancuti.id_jenis', 'left')
            ->orderBy('pengajuancuti.id', 'DESC')
            ->findAll();
    }

    public function getByUser($id_user)
    {
        return $this->select('
            pengajuancuti.*, 
            users.nama, 
            users.nip, 
            jenis_cuti.nama_jenis, 
            jenis_cuti.jumlah_default
        ')
            ->join('users', 'users.id_user = pengajuancuti.id_user')
            ->join('jenis_cuti', 'jenis_cuti.id_jenis = pengajuancuti.id_jenis')
            ->where('pengajuancuti.id_user', $id_user)
            ->orderBy('pengajuancuti.id', 'DESC')
            ->findAll();
    }

    public function getByRole($role, $id_user)
    {
        $field = $role === 'supervisor' ? 'status_supervisor' : 'status_manager';

        return $this->select('
            pengajuancuti.*, 
            users.nama, 
            users.nip, 
            jenis_cuti.nama_jenis, 
            jenis_cuti.jumlah_default
        ')
            ->join('users', 'users.id_user = pengajuancuti.id_user')
            ->join('jenis_cuti', 'jenis_cuti.id_jenis = pengajuancuti.id_jenis')
            ->where('pengajuancuti.' . $field . ' !=', null)
            ->where('pengajuancuti.' . $field . ' !=', '')
            ->where('users.id_user', $id_user)
            ->orderBy('pengajuancuti.id', 'DESC')
            ->findAll();
    }


    public function getDataUntukSupervisor($id_user)
    {
        return $this->select('pengajuancuti.*, users.nip, users.nama, jenis_cuti.nama_jenis')
            ->join('users', 'users.id_user = pengajuancuti.id_user')
            ->join('jenis_cuti', 'jenis_cuti.id_jenis = pengajuancuti.id_jenis')
            ->where('users.id_atasan', $id_user)
            ->orderBy("FIELD(pengajuancuti.status_supervisor, 'pending', 'disetujui', 'ditolak')", '', false)
            ->orderBy('pengajuancuti.id', 'DESC')
            ->findAll();
    }

    public function getDataUntukManager()
    {
        return $this->select('pengajuancuti.*, users.nip, users.nama, jenis_cuti.nama_jenis')
            ->join('users', 'users.id_user = pengajuancuti.id_user')
            ->join('jenis_cuti', 'jenis_cuti.id_jenis = pengajuancuti.id_jenis')
            ->where('pengajuancuti.status_supervisor', 'disetujui')
            ->orderBy("FIELD(pengajuancuti.status_manager, 'pending', 'disetujui', 'ditolak')", '', false)
            ->orderBy('pengajuancuti.id', 'DESC')
            ->findAll();
    }


    /**
     * Fungsi untuk mendapatkan data lansia berdasarkan id
     *
     * @param int $id
     * @return array|null
     */
    public function getDataById($id)
    {
        return $this->where('id', $id)->first();
    }

    public function getDataByIdCetak($id)
    {
        return $this->select('
            pengajuancuti.*, 
            users.nama AS nama, 
            users.nip, 
            users.nohape, 
            users.ttd_user, 
            users.id_atasan, 
             jabatan.nama_jabatan,
            jenis_cuti.nama_jenis,
            unit_kerja.nama_unit,
        ')
            ->join('users', 'users.id_user = pengajuancuti.id_user', 'left')
            ->join('jabatan', 'jabatan.id_jabatan = users.id_jabatan', 'left')
            ->join('unit_kerja', 'unit_kerja.id_unit= users.id_unit', 'left')
            ->join('jenis_cuti', 'jenis_cuti.id_jenis = pengajuancuti.id_jenis', 'left')
            ->where('pengajuancuti.id', $id)
            ->first();
    }

    /**
     * Fungsi untuk menambahkan data baru
     *
     * @param array $data
     * @return bool
     */
    public function tambahData($data)
    {
        return $this->insert($data);
    }

    /**
     * Fungsi untuk memperbarui data
     *
     * @param int $id
     * @param array $data
     * @return bool
     */
    public function updateData($id, $data)
    {
        return $this->update($id, $data);
    }

    /**
     * Fungsi untuk menghapus data
     *
     * @param int $id
     * @return bool
     */
    public function deleteData($id)
    {
        return $this->delete($id);
    }
}
