<?php

namespace App\Models;

use CodeIgniter\Model;

class Projekpenilaian_model extends Model
{
    var $table = 'projek_penilaian';
    public function __construct()
    {
        parent::__construct();
    }
    public function get_rombel($iduser = null, $tahunpelajaran)
    {
        if ($iduser) {
            $query = $this->db->table('rombel')
                ->where('tahunpelajaran', $tahunpelajaran)
                ->where('koordinator', $iduser)
                ->get();
        } else {
            $query = $this->db->table('rombel')
                ->where('tahunpelajaran', $tahunpelajaran)
                ->get();
        }
        return $query->getResult();
    }
    public function get_all_projek($tahunpelajaran)
    {
        $projects = $this->db->table('projek_perencanaan')
            ->join('projek_tema', 'projek_tema.id=projek_perencanaan.tema')
            ->join('rombel', 'rombel.id=projek_perencanaan.id_rombel')
            ->where('projek_perencanaan.tahunpelajaran', $tahunpelajaran)
            ->get()->getResultArray();
        // Inisialisasi array untuk menyimpan informasi dimensi
        $dimensions = [];

        // Ambil informasi dimensi dari database berdasarkan id_dimensi yang ada di setiap proyek
        foreach ($projects as $project) {
            // Pisahkan id_dimensi menjadi array
            $dimensionIds = explode(',', $project['id_dimensi']);

            // Query Builder untuk mengambil informasi dimensi dari database
            $dimensiResults = $this->db->table('dimensi')
                ->whereIn('id', $dimensionIds)
                ->get()
                ->getResultArray();

            // Susun informasi dimensi ke dalam array
            foreach ($dimensiResults as $dimensi) {
                $dimensions[$project['id']][] = [
                    'id_dimensi' => $dimensi['id'],
                    'dimensi' => $dimensi['dimensi']
                ];
            }
        }

        // Masukkan informasi dimensi ke dalam setiap proyek
        foreach ($projects as &$project) {
            $project['dimensi'] = isset($dimensions[$project['id']]) ? $dimensions[$project['id']] : [];
        }

        return $projects;
    }
    public function get_penilaian($idrombel)
    {
        $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('projek_perencanaan.id_rombel', $idrombel)
            ->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,
                    '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;
    }

    public function get_where_penilaian($where)
    {
        $query = $this->db->table('projek_penilaian')
            ->where($where)
            ->get();
        return $query->getRow();
    }
    public function penilaian_add($data)
    {
        $query = $this->db->table($this->table)->insert($data);
        return $this->db->insertID();
    }
    public function penilaian_update($where, $data)
    {
        $this->db->table($this->table)->update($data, $where);
        return $this->db->affectedRows();
    }

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