<?php

namespace App\Models;

use CodeIgniter\Model;

class ModelSiswa extends Model
{
    protected $table = 'tb_siswa';
    protected $primaryKey = 'id_siswa';
    protected $returnType = 'array';

    protected $allowedFields = [
        'nis',
        'nama',
        'jenis_kelamin',
        'id_kelas'
    ];

    // Digunakan di halaman Rekap Pelanggaran per Kelas
    public function getByKelas($id_kelas)
    {
        return $this->db->table('tb_siswa s')
            ->select('
            s.*,

            COALESCE(SUM(DISTINCT p.skor),0) AS skor,

            (
                SELECT COALESCE(SUM(ph.poin),0)
                FROM tb_rekap_penghargaan rp
                JOIN tb_penghargaan ph
                    ON ph.id_penghargaan = rp.id_penghargaan
                WHERE rp.id_siswa = s.id_siswa
            ) AS poin_penghargaan
        ')
            ->join(
                'tb_rekap_pelanggaran r',
                'r.id_siswa = s.id_siswa',
                'left'
            )
            ->join(
                'tb_pelanggaran p',
                'p.id_pelanggaran = r.id_pelanggaran',
                'left'
            )
            ->where('s.id_kelas', $id_kelas)
            ->groupBy('s.id_siswa')
            ->get()
            ->getResultArray();
    }

    // Digunakan di halaman Rekap Pelanggaran Per Murid
    // Digunakan halaman detail siswa + PDF
    public function getDetailSiswa($id_siswa)
    {
        return $this->db->table('tb_siswa s')
            ->select('
            s.*,
            k.nama_kelas,

            COALESCE(
                (
                    SELECT SUM(p.skor)
                    FROM tb_rekap_pelanggaran r
                    JOIN tb_pelanggaran p 
                        ON p.id_pelanggaran = r.id_pelanggaran
                    WHERE r.id_siswa = s.id_siswa
                ),0
            ) AS skor_pelanggaran,

            COALESCE(
                (
                    SELECT SUM(ph.poin)
                    FROM tb_rekap_penghargaan rp
                    JOIN tb_penghargaan ph
                        ON ph.id_penghargaan = rp.id_penghargaan
                    WHERE rp.id_siswa = s.id_siswa
                ),0
            ) AS poin_penghargaan

        ')
            ->join(
                'tb_kelas k',
                'k.id_kelas = s.id_kelas',
                'left'
            )
            ->where('s.id_siswa', $id_siswa)
            ->get()
            ->getRowArray();
    }
}
