<?php

namespace App\Controllers\Api;

use App\Models\BarangModel;
use App\Models\MutasiBarangModel;
use App\Models\PemeliharaanModel;

class DashboardController extends BaseApiController
{
    protected $barang;
    protected $mutasi;
    protected $pemeliharaan;

    public function __construct()
    {
        $this->barang        = new BarangModel();
        $this->mutasi        = new MutasiBarangModel();
        $this->pemeliharaan  = new PemeliharaanModel();
    }

   public function summary()
{
    $db = \Config\Database::connect();

    // 1. total barang
    $totalBarang = $db->table('barang')->countAllResults();

    // 2. kondisi barang
    $kondisi = $db->table('barang')
        ->select('kondisi, COUNT(*) as total')
        ->groupBy('kondisi')
        ->get()
        ->getResultArray();

    // 3. total biaya pemeliharaan
    $totalBiaya = $db->table('pemeliharaan')
        ->selectSum('biaya')
        ->get()
        ->getRowArray();

    // 4. total mutasi
    $totalMutasi = $db->table('mutasi_barang')->countAllResults();

    // 5. barang per ruangan
    $barangPerRuangan = $db->table('barang')
        ->select('ruangan.nama_ruangan, COUNT(barang.id_barang) as total')
        ->join('ruangan', 'ruangan.id_ruangan = barang.id_ruangan', 'left')
        ->groupBy('barang.id_ruangan')
        ->get()
        ->getResultArray();

    // 6. barang per kategori
    $barangPerKategori = $db->table('barang')
        ->select('kategori.nama_kategori, COUNT(barang.id_barang) as total')
        ->join('kategori', 'kategori.id_kategori = barang.id_kategori', 'left')
        ->groupBy('barang.id_kategori')
        ->get()
        ->getResultArray();

    return $this->respondSuccess([
        'total_barang'        => $totalBarang,
        'kondisi_barang'      => $kondisi,
        'total_biaya_rawat'   => (int) ($totalBiaya['biaya'] ?? 0),
        'total_mutasi'        => $totalMutasi,
        'barang_per_ruangan'  => $barangPerRuangan,
        'barang_per_kategori' => $barangPerKategori,
    ], 'Dashboard summary');
}
 public function unit()
    {
        $db = \Config\Database::connect();

        /**
         * ==========================
         * KPI UTAMA
         * ==========================
         */

        // Total unit aktif
        $totalUnitAktif = $db->table('barang_unit')
            ->where('status', 'Aktif')
            ->countAllResults();

        // Total unit dimusnahkan
        $totalUnitDimusnahkan = $db->table('barang_unit')
            ->where('status', 'Dimusnahkan')
            ->countAllResults();

        // Unit bermasalah (kondisi != Baik)
        $unitBermasalah = $db->table('barang_unit')
            ->where('status', 'Aktif')
            ->where('kondisi !=', 'Baik')
            ->countAllResults();

        // Total biaya pemeliharaan
        $totalBiaya = $db->table('pemeliharaan')
            ->selectSum('biaya')
            ->get()
            ->getRow()
            ->biaya ?? 0;

        /**
         * ==========================
         * PIE: KONDISI UNIT
         * ==========================
         */
        $kondisi = $db->table('barang_unit')
            ->select('kondisi, COUNT(*) as total')
            ->where('status', 'Aktif')
            ->groupBy('kondisi')
            ->get()
            ->getResultArray();

        /**
         * ==========================
         * BAR: UNIT PER RUANGAN
         * ==========================
         */
        $ruangan = $db->table('barang_unit')
            ->select('ruangan.nama_ruangan, COUNT(barang_unit.id_unit) as total')
            ->join('ruangan', 'ruangan.id_ruangan = barang_unit.id_ruangan')
            ->where('barang_unit.status', 'Aktif')
            ->groupBy('ruangan.id_ruangan')
            ->orderBy('total', 'DESC')
            ->get()
            ->getResultArray();

        /**
         * ==========================
         * LINE: BIAYA PEMELIHARAAN BULANAN
         * ==========================
         */
        $biayaBulanan = $db->table('pemeliharaan')
            ->select("
                DATE_FORMAT(tanggal, '%Y-%m') as bulan,
                SUM(biaya) as total
            ")
            ->groupBy("DATE_FORMAT(tanggal, '%Y-%m')")
            ->orderBy('bulan', 'ASC')
            ->get()
            ->getResultArray();

        /**
         * ==========================
         * TOP 5 UNIT PALING BOROS
         * ==========================
         */
        $unitBoros = $db->table('pemeliharaan')
            ->select('
                barang_unit.kode_unit,
                barang.nama_barang,
                SUM(pemeliharaan.biaya) as total_biaya
            ')
            ->join('barang_unit', 'barang_unit.id_unit = pemeliharaan.id_unit')
            ->join('barang', 'barang.id_barang = barang_unit.id_barang')
            ->groupBy('pemeliharaan.id_unit')
            ->orderBy('total_biaya', 'DESC')
            ->limit(5)
            ->get()
            ->getResultArray();

        /**
         * ==========================
         * RESPONSE
         * ==========================
         */
        return $this->respondSuccess([
            'kpi' => [
                'total_unit_aktif'      => $totalUnitAktif,
                'total_unit_dimusnahkan'=> $totalUnitDimusnahkan,
                'unit_bermasalah'       => $unitBermasalah,
                'total_biaya'           => (int)$totalBiaya,
            ],
            'kondisi'        => $kondisi,
            'ruangan'        => $ruangan,
            'biaya_bulanan'  => $biayaBulanan,
            'unit_boros'     => $unitBoros,
        ], 'Dashboard unit');
    }


}