<?php

namespace App\Models;

use CodeIgniter\Model;
use CodeIgniter\Database\ConnectionInterface;

class DashboardModel extends Model
{
    protected $db;

    public function __construct(ConnectionInterface &$db = null)
    {
        parent::__construct();
        $this->db = $db ?? \Config\Database::connect();
    }

    // Fungsi umum untuk hitung total data dalam tabel
    public function getTotal($table)
    {
        return $this->db->table($table)->countAll();
    }

    public function countItems()
    {
        return $this->getTotal('items');
    }

    public function countSuppliers()
    {
        return $this->getTotal('suppliers');
    }

    public function countCustomers()
    {
        return $this->getTotal('customers');
    }

    public function countUsers()
    {
        return $this->getTotal('users');
    }

    public function countWarehouses()
    {
        return $this->getTotal('gudang');
    }

    // Jumlah item per nama gudang
    public function getJumlahItemPerGudang()
    {
        return $this->db->table('items')
            ->select('gudang.nama as nama_gudang, COUNT(items.id) as jumlah_item')
            ->join('gudang', 'gudang.id = items.gudang_id', 'left')
            ->groupBy('gudang.nama')
            ->get()
            ->getResult();
    }

    // Total gudang berdasarkan nama (misalnya: area, produksi)
    public function getTotalGudangByJenis($namaGudang)
    {
        return $this->db->table('gudang')
            ->where('nama', $namaGudang)
            ->countAllResults();
    }

    // Produk terlaris (top 5)
    public function getTop5Sales()
    {
        return $this->getTopProdukTerjual(5);
    }

    public function getTopProdukTerjual($limit = 5, $bulan = null, $tahun = null)
{
    $builder = $this->db->table('sale_detail pd')
        ->select('i.nama as nama_produk, SUM(pd.qty) as total_terjual')
        ->join('items i', 'pd.item_id = i.id')
        ->join('sales s', 'pd.sale_id = s.id');

    if ($bulan) {
        // Jika tahun tidak diberikan, gunakan tahun saat ini
        if (!$tahun) {
            $tahun = date('Y');
        }

        $builder->where('MONTH(s.tanggal)', $bulan);
        $builder->where('YEAR(s.tanggal)', $tahun);
    }

    return $builder->groupBy('pd.item_id')
        ->orderBy('total_terjual', 'DESC')
        ->limit($limit)
        ->get()
        ->getResultArray();
}



    public function getProdukPerKategori()
{
    return $this->db->table('items i')
        ->select('c.name as nama_kategori, COUNT(i.id) as total_produk')
        ->join('categories c', 'i.category_id = c.id')
        ->groupBy('i.category_id')
        ->orderBy('total_produk', 'DESC')
        ->get()
        ->getResultArray();
}
// App\Models\DashboardModel.php
public function getMonthlySales($tahun)
{
    return $this->db->table('sales')
        ->select('MONTH(tanggal) as bulan, SUM(total_bayar) as total, SUM(sd.qty) AS qty')
        ->where('YEAR(tanggal)', $tahun)
        ->join('sale_detail sd', 'sd.sale_id = sales.id')
        ->groupBy('bulan')
        ->orderBy('bulan')
        ->get()
        ->getResultArray();
}



}
