<?php

namespace App\Models;

use CodeIgniter\Model;

class ModelUser extends Model
{
    protected $table = 'users'; // Nama tabel di database
    protected $primaryKey = 'id_user'; // Primary key tabel
    protected $allowedFields = ['nama', 'nip', 'id_jabatan', 'id_unit', 'id_atasan', 'status_kepegawaian', 'role', 'nohape', 'email', 'password', 'level', 'foto', 'status', 'ttd_user'];
    protected $createdField  = 'created_at';
    protected $updatedField  = 'updated_at';

    /**
     * Fungsi untuk mendapatkan semua data user dengan relasi lengkap
     */
    public function getAllData($userLevel = null, $userEmail = null)
    {
        $builder = $this->db->table($this->table . ' u');
        $builder->select('
            u.id_user, u.nama, u.nip, u.nohape, u.email, u.role, u.status, 
            u.status_kepegawaian, u.foto, u.created_at,
            j.nama_jabatan, 
            uk.nama_unit, 
            a.nama AS nama_atasan
        ');
        $builder->join('jabatan j', 'j.id_jabatan = u.id_jabatan', 'left');
        $builder->join('unit_kerja uk', 'uk.id_unit = u.id_unit', 'left');
        $builder->join('users a', 'a.id_user = u.id_atasan', 'left'); // join nama atasan

        if ($userLevel !== 'admin') {
            $builder->where('u.email', $userEmail); // selain admin, hanya bisa lihat diri sendiri
        }

        $builder->orderBy('u.nama', 'ASC');
        return $builder->get()->getResultArray();
    }

    public function getAtasanByUnit($id_unit)
    {
        if ($this->request->isAJAX()) {
            $listAtasan = $this->modelUser
                ->whereIn('role', ['supervisor', 'manager'])
                ->where('id_unit', $id_unit)
                ->where('status', 'aktif')
                ->orderBy('nama', 'ASC')
                ->findAll();

            return $this->response->setJSON($listAtasan);
        }
    }

    public function getAllDataUser()
    {
        return $this->orderBy('id_user', 'DESC')->findAll();
    }

    /**
     * Fungsi untuk mendapatkan data user berdasarkan id_user
     *
     * @param int $id_user
     * @return array|null
     */
    public function getDataById($id_user)
    {
        return $this->where('id_user', $id_user)->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_user
     * @param array $data
     * @return bool
     */
    public function updateData($id_user, $data)
    {
        return $this->update($id_user, $data);
    }

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

    // Fungsi untuk mendapatkan data pengguna berdasarkan ID
    public function getProfil($id_user)
    {
        return $this->find($id_user);  // Mengambil data berdasarkan id_user
    }

    // Fungsi untuk memperbarui data profil pengguna
    public function updateProfil($id_user, $data)
    {
        // return $this->update($id_user, $data);  // Memperbarui data berdasarkan id_user
        return $this->db->table('users')->where('id_user', $id_user)->update($data);  // Memperbarui data berdasarkan id_user
    }
}
