<?php

namespace App\Models;

use CodeIgniter\Model;

class ModelGrafikRekapPelanggaran extends Model
{
    protected $table = 'tb_rekap_pelanggaran';

    public function getGrafikPelanggaran()
    {
        return $this->db->table('tb_rekap_pelanggaran r')
            ->select('
            p.id_pelanggaran,
            p.nama_pelanggaran,
            COUNT(DISTINCT r.id_siswa) AS jumlah
        ')
            ->join('tb_pelanggaran p', 'p.id_pelanggaran = r.id_pelanggaran')
            ->groupBy('p.id_pelanggaran')
            ->orderBy('jumlah', 'DESC')
            ->get()
            ->getResultArray();
    }

    public function totalPenghargaan()
    {
        return $this->db
            ->table('tb_rekap_penghargaan')
            ->countAllResults();
    }

    public function getGrafikPenghargaan()
    {
        return $this->db->table('tb_rekap_penghargaan r')
            ->select('p.nama_penghargaan,
                  COUNT(*) jumlah')
            ->join(
                'tb_penghargaan p',
                'p.id_penghargaan=r.id_penghargaan'
            )
            ->groupBy('p.id_penghargaan')
            ->orderBy('jumlah', 'DESC')
            ->get()
            ->getResultArray();
    }

    public function getGrafikPenghargaanBulanan()
    {
        return $this->db->table('tb_rekap_penghargaan')
            ->select('MONTH(tanggal) AS bulan, COUNT(*) AS jumlah')
            ->groupBy('MONTH(tanggal)')
            ->orderBy('MONTH(tanggal)')
            ->get()
            ->getResultArray();
    }

    // Grafik Total Pelanggaran per Bulan
    public function getGrafikBulanan()
    {
        return $this->db->table('tb_rekap_pelanggaran')
            ->select("MONTH(tanggal) as bulan, COUNT(*) as jumlah")
            ->groupBy("MONTH(tanggal)")
            ->orderBy("MONTH(tanggal)")
            ->get()
            ->getResultArray();
    }

    public function totalSiswa()
    {
        return $this->db->table('tb_siswa')->countAllResults();
    }

    public function totalPelanggaran()
    {
        return $this->db->table('tb_rekap_pelanggaran')->countAllResults();
    }

    public function totalSkor()
    {
        $hasil = $this->db->table('tb_siswa')
            ->selectSum('skor')
            ->get()
            ->getRow();

        return $hasil->skor_pelanggaran ?? 0;
    }

    public function hariIni()
    {
        return $this->db->table('tb_rekap_pelanggaran')
            ->where('DATE(tanggal)', date('Y-m-d'))
            ->countAllResults();
    }

    public function totalGuru()
    {
        return $this->db->table('tb_guru')->countAllResults();
    }

    public function totalJenisPelanggaran()
    {
        return $this->db->table('tb_pelanggaran')->countAllResults();
    }

    public function totalHariIni()
    {
        return $this->db->table('tb_rekap_pelanggaran')
            ->where('DATE(tanggal)', date('Y-m-d'))
            ->countAllResults();
    }
}
