<?php

namespace App\Models;

use CodeIgniter\Model;

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

    public function get_all_projek($iduser, $tahunpelajaran)
    {
        if ($iduser) {
            $projects = $this->db->table('projek_perencanaan as projek')
                ->select('projek.id as id_projek,projek.id_dimensi,projek.tahunpelajaran,rombel.id as id_rombel,rombel.nama_rombel,projek_tema.nama_tema,projek.nama_projek,projek.deskripsi')
                ->join('projek_tema', 'projek_tema.id=projek.tema')
                ->join('rombel', 'rombel.id=projek.id_rombel')
                ->where('projek.tahunpelajaran', $tahunpelajaran)
                ->where('rombel.koordinator', $iduser)
                ->get()
                ->getResultArray();
        } else {
            $projects = $this->db->table('projek_perencanaan as projek')
                ->select('projek.id as id_projek,projek.id_dimensi,projek.tahunpelajaran,rombel.id as id_rombel,rombel.nama_rombel,projek_tema.nama_tema,projek.nama_projek,projek.deskripsi')
                ->join('projek_tema', 'projek_tema.id=projek.tema')
                ->join('rombel', 'rombel.id=projek.id_rombel')
                ->where('projek.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('dimensi.id', $dimensionIds)
                ->get()
                ->getResultArray();
            // Susun informasi dimensi ke dalam array
            foreach ($dimensiResults as $dimensi) {
                $dimensions[$project['id_projek']][] = [
                    'id_dimensi' => $dimensi['id'],
                    'dimensi' => $dimensi['dimensi']
                ];
            }
        }
        // Masukkan informasi dimensi ke dalam setiap proyek
        foreach ($projects as &$project) {
            $project['dimensi'] = isset($dimensions[$project['id_projek']]) ? $dimensions[$project['id_projek']] : [];
        }
        return $projects;
    }
    public function get_projek_id($id)
    {
        $project = $this->db->table('projek_perencanaan')
            ->where('id', $id)
            ->get()->getRowArray();
        // Inisialisasi array untuk menyimpan informasi dimensi
        $dimensions = [];

        // Ambil informasi dimensi dari database berdasarkan id_dimensi yang ada di setiap proyek

        // 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

        $project['dimensi'] = isset($dimensions[$project['id']]) ? $dimensions[$project['id']] : [];


        return $project;
    }

    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_tema()
    {
        $query = $this->db->table('projek_tema')
            ->get();
        return $query->getResult();
    }
    public function get_dimensi($fase = null)
    {
        if ($fase) {
            $query = $this->db->table('dimensi')
                ->where('fase', $fase)
                ->get();
        } else {
            $query = $this->db->table('dimensi')
                ->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 projek_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(['projek' => $data], ['id' => 1]);
        return $update;
    }

    public function projek_update($where, $data)
    {
        $this->db->table($this->table)->update($data, $where);
        return $this->db->affectedRows();
    }
    public function koor_update($where, $data)
    {
        $this->db->table('rombel')->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_where($table, $where)
    {
        $this->db->table($table)->delete($where);
    }

    public function get_all_rombel($iduser, $tahunpelajaran)
    {
        if ($iduser) {
            $query = $this->db->table('rombel')
                ->select('rombel.*,user.nama as nama_koor')
                ->join('user', 'user.id = rombel.koordinator')
                ->where('rombel.tahunpelajaran', $tahunpelajaran)
                ->where('koordinator', $iduser)
                ->get()
                ->getResult();
        } else {
            $query = $this->db->table('rombel')
                ->select('rombel.*,user.nama as nama_koor')
                ->join('user', 'user.id = rombel.koordinator', 'left')
                ->where('rombel.tahunpelajaran', $tahunpelajaran)
                ->get()
                ->getResult();
        }
        $guru = $this->db->table('user')
            ->select('user.id,user.nama')
            ->like('role', 'koordinator')
            ->get()
            ->getResult();
        $data = [
            'guru' => $guru,
            'rombel' => $query,
        ];
        return $data;
    }
}
