<?php

namespace App\Models;

use CodeIgniter\Model;

class Rapor_model extends Model
{

    public function __construct()
    {
        parent::__construct();
    }

    public function get_siswa_rombel($idrombel = null, $tahunpelajaran)
    {
        $rombelid = array_column($idrombel, 'id');
        if (!$idrombel) {

            $query = $this->db->table('rombel_siswa')
                ->select('rombel_siswa.id as id_rombel,siswa.id as id_siswa,siswa.nama,siswa.nis,rombel.nama_rombel')
                ->join('siswa', "siswa.id=rombel_siswa.id_siswa")
                ->join('rombel', "rombel.id=rombel_siswa.id_rombel")
                ->where('rombel.tahunpelajaran', $tahunpelajaran)
                ->orderBy('siswa.nama', 'asc')
                ->get();
            return $query->getResult();
        } else {
            $query = $this->db->table('rombel_siswa')
                ->select('rombel_siswa.id as id_rombel,siswa.id as id_siswa,siswa.nama,siswa.nis,rombel.nama_rombel')
                ->join('siswa', "siswa.id=rombel_siswa.id_siswa")
                ->join('rombel', "rombel.id=rombel_siswa.id_rombel")
                ->whereIn('rombel_siswa.id_rombel', $rombelid)
                ->where('rombel.tahunpelajaran', $tahunpelajaran)
                ->orderBy('siswa.nama', 'asc')
                ->get();
            return $query->getResult();
        }
    }

    public function get_rombel($idguru, $tahunpelajaran)
    {

        $query = $this->db->table('rombel')
            ->select('rombel.id')
            ->where('rombel.walikelas', $idguru)
            ->where('rombel.tahunpelajaran', $tahunpelajaran)
            ->get();
        return $query->getResultArray();
    }
    public function get_tahun($tahunpelajaran)
    {

        $query = $this->db->table('tahunpelajaran')
            ->where('kode_tahunpelajaran', $tahunpelajaran)
            ->get();
        return $query->getRow();
    }

    public function get_siswa_id($idsiswa, $tahunpelajaran)
    {
        $query = $this->db->table('siswa')
            ->select('siswa.id as id_siswa,siswa.*,rombel.nama_rombel,rombel.id as id_rombel,rombel.tingkat,user.nama as walikelas')
            ->join('rombel_siswa', 'rombel_siswa.id_siswa=siswa.id')
            ->join('rombel', 'rombel.id=rombel_siswa.id_rombel')
            ->join('user', 'user.id=rombel.walikelas')
            ->where('rombel.tahunpelajaran', $tahunpelajaran)
            ->where('siswa.id', $idsiswa)
            ->get();
        return $query->getRow();
    }

    public function get_penilaian_id($idsiswa, $tahunpelajaran)
    {
        $query = $this->db->table('penilaian')
            ->select('penilaian.*,matapelajaran.nama_matapelajaran,pembelajaran.no_urut')
            ->join('pembelajaran', 'penilaian.id_pembelajaran=pembelajaran.id')
            ->join('matapelajaran', 'matapelajaran.id=pembelajaran.id_matapelajaran')
            ->where('penilaian.id_siswa', $idsiswa)
            ->where('penilaian.tahunpelajaran', $tahunpelajaran)
            ->orderby('pembelajaran.no_urut')
            ->get();
        return $query->getResult();
    }
    public function get_eskul_id($idsiswa, $tahunpelajaran)
    {
        $query = $this->db->table('penilaian_eskul')
            ->select('penilaian_eskul.*,eskul.nama_ekstrakulikuler')
            ->join('ekstrakulikuler as eskul', 'eskul.id=penilaian_eskul.id_eskul')
            ->where('penilaian_eskul.id_siswa', $idsiswa)
            ->where('penilaian_eskul.tahunpelajaran', $tahunpelajaran)
            ->get();
        return $query->getResult();
    }

    public function get_absensi_id($idsiswa, $tahunpelajaran)
    {
        $query = $this->db->table('absensi')
            ->select('absensi.*')
            ->where('absensi.id_siswa', $idsiswa)
            ->where('absensi.tahunpelajaran', $tahunpelajaran)
            ->get();
        return $query->getRow();
    }
    public function get_projek_id($idsiswa, $tahunpelajaran)
    {
        return $query = $this->db->table('projek_penilaian')
            ->select('projek_penilaian.*, projek_perencanaan.nama_projek,dimensi.dimensi,dimensi.elemen,dimensi.deskripsi,dimensi.subelemen')
            ->join('projek_perencanaan', 'projek_perencanaan.id=projek_penilaian.id_projek')
            ->join('dimensi', 'dimensi.id=projek_penilaian.id_dimensi')
            ->where('projek_penilaian.id_siswa', $idsiswa)
            ->where('projek_perencanaan.tahunpelajaran', $tahunpelajaran)
            ->orderBy('dimensi.dimensi', 'ASC')
            //->groupBy('dimensi.dimensi')
            ->get()
            ->getResult();
    }
    public function get_projek()
    {
        return $query = $this->db->table('projek_perencanaan')
            ->select('projek_perencanaan.*')
            ->join('projek_penilaian', 'projek_penilaian.id_projek=projek_perencanaan.id')
            ->groupBy('projek_perencanaan.id')
            ->get()
            ->getResult();
    }
    public function get_penilaian($idsiswa, $tahunpelajaran)
    {
        $siswa = $this->db->table('siswa')
            ->select('siswa.id as id_siswa,siswa.nama,rombel.nama_rombel,projek_perencanaan.id as id_projek,projek_perencanaan.nama_projek,projek_perencanaan.deskripsi, projek_penilaian.nilai, projek_perencanaan.id_dimensi')
            ->join('rombel_siswa', 'siswa.id=rombel_siswa.id_siswa')
            ->join('rombel', 'rombel.id=rombel_siswa.id_rombel')
            ->join('projek_perencanaan', 'projek_perencanaan.id_rombel=rombel.id')
            ->join('projek_penilaian', 'projek_penilaian.id_siswa=siswa.id', 'left')
            ->where('siswa.id', $idsiswa)
            ->where('projek_perencanaan.tahunpelajaran', $tahunpelajaran)
            ->groupBy('siswa.id, projek_perencanaan.id')
            ->get()->getResult();

        // Array untuk menyimpan hasil akhir
        $result = array();


        // Loop melalui setiap siswa
        foreach ($siswa as $data) {
            // Pisahkan id_dimensi menjadi array
            $id_dimensi_array = explode(',', $data->id_dimensi);

            // Array untuk menyimpan nilai dimensi
            $nilai_dimensi = array();

            // Loop melalui setiap id_dimensi
            foreach ($id_dimensi_array as $id_dimensi) {
                // Ambil nilai berdasarkan id_dimensi dan id_siswa
                $nilai = $this->db->table('projek_penilaian')
                    ->select('nilai')
                    ->where('id_dimensi', $id_dimensi)
                    ->where('id_siswa', $data->id_siswa)
                    ->get()
                    ->getRow();
                $dimensi = $this->db->table('dimensi')
                    ->where('id', $id_dimensi)
                    ->get()
                    ->getRow();

                // Tambahkan nilai dimensi ke dalam array
                $nilai_dimensi[] = array(
                    'id_dimensi' => $id_dimensi,
                    'dimensi' => $dimensi->dimensi,
                    'elemen' => $dimensi->elemen,
                    'subelemen' => $dimensi->subelemen,
                    'deskripsi' => $dimensi->deskripsi,
                    'nilai' => $nilai ? $nilai->nilai : null // Nilai akan null jika tidak ada data yang ditemukan
                );
            }

            // Struktur data projek per siswa
            $projek_siswa = array(
                'id_projek' => $data->id_projek,
                'nama_projek' => $data->nama_projek,
                'deskripsi' => $data->deskripsi,
                'nilai_dimensi' => $nilai_dimensi
            );

            // Cek apakah siswa sudah ada dalam array hasil
            $siswa_exists = false;
            foreach ($result as &$siswa_data) {
                if ($siswa_data['id_siswa'] === $data->id_siswa) {
                    // Jika siswa sudah ada, tambahkan projek ke data siswa
                    $siswa_data['projek'][] = $projek_siswa;
                    $siswa_exists = true;
                    break;
                }
            }

            // Jika siswa belum ada dalam array hasil, tambahkan siswa beserta projeknya
            if (!$siswa_exists) {
                $result[] = array(
                    'id_siswa' => $data->id_siswa,
                    'nama' => $data->nama,
                    'nama_rombel' => $data->nama_rombel,
                    'projek' => array($projek_siswa)
                );
            }
        }


        return $result;
    }
}
