<?php

namespace App\Models;

use CodeIgniter\Model;

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

    public function get_all_rombel($tahunpelajaran)
    {
        $query = $this->db->table($this->table)
            ->select('rombel.*,user.nama as nama_walas,(SELECT COUNT(*) FROM rombel_siswa WHERE rombel_siswa.id_rombel=rombel.id)as jumlah_anggota,(SELECT COUNT(*) FROM pembelajaran WHERE pembelajaran.id_rombel=rombel.id)as jumlah_pembelajaran,(SELECT COUNT(*) FROM tujuan WHERE tujuan.id_rombel=rombel.id)as jumlah_tujuan')
            ->join('user', 'user.id = rombel.walikelas')
            ->where('rombel.tahunpelajaran', $tahunpelajaran)
            ->get();
        return $query->getResult();
    }
    public function cek_mapel_mapping($where)
    {
        $query = $this->db->table('pembelajaran')
            ->where($where)
            ->get();
        return $query->getRow();
    }
    public function copy_pembelajaran($idrombel1, $idrombel2)
    {
        // Ambil data pembelajaran dari id rombel pertama
        $query = $this->db->table('pembelajaran')
            ->where('id_rombel', $idrombel1)
            ->get();
        $pembelajaran = $query->getResult();
        $this->db->table('pembelajaran')->where('id_rombel', $idrombel2)->delete();
        // Ubah nilai id_rombel menjadi id rombel kedua dan simpan kembali
        foreach ($pembelajaran as $data) {
            $data->id_rombel = $idrombel2;
            unset($data->id); // Hapus id agar tidak terjadi konflik primary key saat menyimpan kembali
            $this->db->table('pembelajaran')->insert($data);
        }

        // Hapus semua data rombel1

    }
    public function get_anggota($idrombel, $tahunpelajaran)
    {
        $query = $this->db->table('rombel_siswa')
            ->select('rombel_siswa.id,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_siswa.id_rombel', $idrombel)
            ->where('rombel.tahunpelajaran', $tahunpelajaran)
            ->orderBy('siswa.nama', 'asc')
            ->get();
        return $query->getResult();
    }
    public function get_where_anggota($where)
    {
        $query =  $this->db->table('rombel_siswa')
            ->where($where)
            ->get();
        return $query->getRow();
    }
    public function get_tingkat()
    {
        $query =  $this->db->table('tingkat')

            ->get();
        return $query->getResult();
    }

    public function rombel_addanggota($data)
    {
        $query = $this->db->table('rombel_siswa')->insert($data);
        return $this->db->insertID();
    }
    public function delete_anggota($id)
    {
        $this->db->table('rombel_siswa')->delete(array('id' => $id));
        $this->db->table('penilaian')->delete(['id' => $id]);
    }
    public function get_mapel_mapping($id)
    {
        $query = $this->db->table('pembelajaran')
            ->select('pembelajaran.*,matapelajaran.nama_matapelajaran,user.nama')
            ->join('user', 'user.id = pembelajaran.id_guru')
            ->join('matapelajaran', 'matapelajaran.id = pembelajaran.id_matapelajaran')
            ->where('pembelajaran.id_rombel', $id)
            ->orderBy('pembelajaran.no_urut')
            ->get()
            ->getResult();
        // Ambil semua data materi dari tabel pembelajaran_materi
        $query_user = $this->db->table('user')
            ->select('id, nama')
            ->like('role', 'guru')
            ->get()
            ->getResult();

        $query_mapel = $this->db->table('matapelajaran')
            ->select('id, nama_matapelajaran')
            ->get()
            ->getResult();

        // Buat array untuk menyimpan informasi materi
        $user = [];

        // Loop semua data materi dan tambahkan ke array materi
        foreach ($query_user as $user_row) {
            $user[] = [
                'id_user' => $user_row->id,
                'nama_user' => $user_row->nama
            ];
        }
        $mapel = [];

        // Loop semua data materi dan tambahkan ke array materi
        foreach ($query_mapel as $mapel_row) {
            $mapel[] = [
                'id_mapel' => $mapel_row->id,
                'nama_mapel' => $mapel_row->nama_matapelajaran
            ];
        }

        // Tambahkan informasi guru dan mata pelajaran ke setiap objek hasil query
        foreach ($query as $row) {
            $row->user = $user;
            $row->mapel = $mapel;
        }

        return $query;
    }

    public function get_wali()
    {
        $query = $this->db->table('user')
            ->like('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 pembelajaran_add($data)
    {
        $query = $this->db->table('pembelajaran')->insert($data);
        return $this->db->insertID();
    }
    public function pembelajaran_update($where, $data)
    {
        $this->db->table('pembelajaran')->update($data, $where);
        return $this->db->affectedRows();
    }

    public function rombel_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(['rombel' => $data], ['id' => 1]);
        return $update;
    }

    public function rombel_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));
    }

    public function delete_mapping($id)
    {
        $this->db->table('pembelajaran')->delete(array('id' => $id));
    }
    public function get_mapping_by_id($id)
    {
        $query =  $this->db->table('pembelajaran')
            ->where('id', $id)
            ->get();
        return $query->getRow();
    }
}
