<?php

namespace App\Models;

use CodeIgniter\Model;

class Penilaian_model extends Model
{
    var $table = 'penilaian';
    public function __construct()
    {
        parent::__construct();
    }

    public function get_all_penilaian()
    {
        $query = $this->db->table($this->table)
            ->get();
        return $query->getResult();
    }
    public function get_where_penilaian($where)
    {
        $query = $this->db->table('penilaian')
            ->where($where)
            ->get();
        return $query->getResult();
    }
    public function get_where_tujuan($where)
    {
        $query = $this->db->table('tujuan')
            ->where($where)
            ->get();
        return $query->getResult();
    }
    public function cek_where($where)
    {
        $query = $this->db->table($this->table)
            ->where($where)
            ->get();
        return $query->getRow();
    }

    public function get_all_pembelajaran($tahunpelajaran, $iduser)
    {
        if ($iduser) {
            $query = $this->db->table('pembelajaran')
                ->select('pembelajaran.*,user.nama as nama_guru,matapelajaran.nama_matapelajaran,rombel.nama_rombel,(SELECT COUNT(*) FROM rombel_siswa WHERE rombel.id = rombel_siswa.id_rombel)  as jumlah_siswa,(SELECT COUNT(*) FROM penilaian WHERE penilaian.id_pembelajaran = pembelajaran.id)  as jumlah_dinilai')
                ->join('user', 'user.id = pembelajaran.id_guru')
                ->join('matapelajaran', 'matapelajaran.id = pembelajaran.id_matapelajaran')
                ->join('rombel', 'rombel.id = pembelajaran.id_rombel')
                ->where('rombel.tahunpelajaran', $tahunpelajaran)
                ->where('pembelajaran.id_guru', $iduser)
                ->get();
        } else {
            $query = $this->db->table('pembelajaran')
                ->select('pembelajaran.*,user.nama as nama_guru,matapelajaran.nama_matapelajaran,rombel.nama_rombel,(SELECT COUNT(*) FROM rombel_siswa WHERE rombel.id = rombel_siswa.id_rombel)  as jumlah_siswa,(SELECT COUNT(*) FROM penilaian WHERE penilaian.id_pembelajaran = pembelajaran.id)  as jumlah_dinilai')
                ->join('user', 'user.id = pembelajaran.id_guru')
                ->join('matapelajaran', 'matapelajaran.id = pembelajaran.id_matapelajaran')
                ->join('rombel', 'rombel.id = pembelajaran.id_rombel')
                ->where('rombel.tahunpelajaran', $tahunpelajaran)
                ->get();
        }
        return $query->getResult();
    }
    public function get_penilaian_siswa($rombel, $idpembelajaran, $tahunpelajaran)
    {
        $query = $this->db->table('siswa')
            ->select('siswa.id as siswa_id, siswa.nama, rombel_siswa.id_rombel as id_rombel, penilaian.*')
            ->join('rombel_siswa', "rombel_siswa.id_siswa=siswa.id", 'left')
            ->join('rombel', "rombel.id=rombel_siswa.id_rombel", 'left')
            ->join('penilaian', "siswa.id=penilaian.id_siswa and penilaian.id_pembelajaran='$idpembelajaran'", 'left')
            ->join('pembelajaran', 'pembelajaran.id = penilaian.id_pembelajaran', 'left')
            ->where('rombel_siswa.id_rombel', $rombel)
            ->where('rombel.tahunpelajaran', $tahunpelajaran)
            ->get()
            ->getResult();
        // Query untuk mendapatkan data tujuan
        $queryTujuan = $this->db->table('tujuan')
            ->select('id,tujuan')
            ->where('id_pembelajaran', $idpembelajaran)
            ->get()
            ->getResult();

        // Menggabungkan hasil query ke dalam satu array
        $result = [
            'siswa' => $query,
            'tujuan' => $queryTujuan
        ];
        return $result;
    }
    public function get_capaian_siswa($idpembelajaran, $tahunpelajaran)
    {

        $querySiswaPenilaian = $this->db->table('penilaian')
            ->select('siswa.id as siswa_id, siswa.nama, penilaian.*')
            ->join('siswa', "siswa.id = penilaian.id_siswa")
            ->where('penilaian.id_pembelajaran', $idpembelajaran)
            ->where('penilaian.tahunpelajaran', $tahunpelajaran)
            ->get()
            ->getResult();

        // Query untuk mendapatkan data tujuan
        $queryTujuan = $this->db->table('tujuan')
            ->select('id,tujuan')
            ->where('id_pembelajaran', $idpembelajaran)
            ->get()
            ->getResult();

        // Menggabungkan hasil query ke dalam satu array
        $result = [
            'siswa' => $querySiswaPenilaian,
            'tujuan' => $queryTujuan
        ];

        return $result;
    }


    public function get_guru()
    {
        $query = $this->db->table('user')
            ->where('role', 'guru')
            ->get();
        return $query->getResult();
    }

    public function get_by_id($id)
    {
        $query =  $this->db->table($this->table)
            ->where('id', $id)
            ->get();
        return $query->getRow();
    }
    public function penilaian_add($data)
    {
        $query = $this->db->table($this->table)->insert($data);
        return $this->db->insertID();
    }
    public function update_status($where)
    {

        $cekdata = $this->db->table($this->table)
            ->update(['status' => 'tidak'], $where);
        return $cekdata;
    }
    public function update_setting($data)
    {
        $update = $this->db->table('settings')
            ->update(['penilaian' => $data], ['id' => 1]);
        return $update;
    }

    public function penilaian_update($where, $data)
    {
        $this->db->table('penilaian')->update($data, $where);
        return $this->db->affectedRows();
    }

    public function delete_by_id($id)
    {
        $this->db->table($this->table)->delete(array('id' => $id));
    }

    //================== MODEL LEGER ============================
    public function get_siswa($idrombel = null, $tahunpelajaran)
    {

        $query = $this->db->table('siswa')
            ->select('siswa.id as id_siswa,siswa.nama, rombel.nama_rombel, rombel.id as id_rombel')
            ->join('rombel_siswa', 'rombel_siswa.id_siswa = siswa.id')
            ->join('rombel', 'rombel.id = rombel_siswa.id_rombel')
            ->where('rombel.tahunpelajaran', $tahunpelajaran)
            ->where('rombel_siswa.id_rombel', $idrombel)
            ->orderBy('siswa.nama', 'ASC')
            ->get();

        $result = $query->getResult();
        $siswaArray = array();
        foreach ($result as &$row) {
            $subquery = $this->db->table('penilaian')
                ->select('penilaian.id_pembelajaran as id_pembelajaran, penilaian.nilai_akhir')
                ->where('penilaian.id_siswa', $row->id_siswa)
                ->get()
                ->getResult();

            $subabsensi = $this->db->table('absensi')
                ->select('absensi.sakit, absensi.ijin, absensi.alfa')
                ->where('absensi.id_siswa', $row->id_siswa)
                ->where('absensi.tahunpelajaran', $tahunpelajaran)
                ->get()
                ->getResult();

            $row->penilaian = $subquery;
            $row->absensi = $subabsensi;
            $siswaArray[] = $row;
        }
        $querypembelajaran = $this->db->table('pembelajaran')
            ->select('pembelajaran.id as id_pembelajaran, matapelajaran.nama_matapelajaran')
            ->join('matapelajaran', 'matapelajaran.id = pembelajaran.id_matapelajaran')
            ->where('pembelajaran.id_rombel', $idrombel)
            ->get()
            ->getResult();


        return ['pembelajaran' => $querypembelajaran, 'siswa' => $siswaArray];
    }
    public function get_rombel($tahunpelajaran)
    {

        $query = $this->db->table('rombel')
            ->select('rombel.id as id_rombel,rombel.nama_rombel')
            ->where('rombel.tahunpelajaran', $tahunpelajaran)
            ->get();

        return $query->getResult();
    }
}
