<?php

namespace App\Controllers;

class Laporan extends BaseController
{
    public function manajemenAset()
    {
        $db = \Config\Database::connect();
        
        $unifiedData = [];

        // 1. Peminjaman
        $builder = $db->table('peminjaman');
        $builder->select('peminjaman.tgl_peminjaman as tanggal, "Peminjaman" as manajemen, barang.nama_barang, peminjaman.keterangan, ruangan.nama_ruangan, peminjaman.biaya as pemasukan, 0 as pengeluaran');
        $builder->join('barang', 'barang.id = peminjaman.id_barang', 'left');
        $builder->join('ruangan', 'ruangan.id = peminjaman.id_ruangan', 'left');
        $peminjaman = $builder->get()->getResultArray();
        $unifiedData = array_merge($unifiedData, $peminjaman);

        // 2. Perbaikan
        $builder = $db->table('perbaikan');
        $builder->select('perbaikan.tgl_perbaikan as tanggal, "Perbaikan" as manajemen, barang.nama_barang, perbaikan.jenis_perbaikan as keterangan, ruangan.nama_ruangan, 0 as pemasukan, perbaikan.biaya as pengeluaran');
        $builder->join('barang', 'barang.id = perbaikan.id_barang', 'left');
        $builder->join('ruangan', 'ruangan.id = perbaikan.id_ruangan', 'left');
        $perbaikan = $builder->get()->getResultArray();
        $unifiedData = array_merge($unifiedData, $perbaikan);

        // 3. Pengajuan
        $builder = $db->table('pengajuan');
        $builder->select('pengajuan.tgl_pengajuan as tanggal, "Pengajuan" as manajemen, pengajuan.nama_barang, pengajuan.keterangan, ruangan.nama_ruangan, 0 as pemasukan, pengajuan.biaya as pengeluaran');
        $builder->join('ruangan', 'ruangan.id = pengajuan.id_ruangan', 'left');
        $pengajuan = $builder->get()->getResultArray();
        $unifiedData = array_merge($unifiedData, $pengajuan);

        // 4. Penghapusan
        $builder = $db->table('penghapusan');
        $builder->select('COALESCE(penghapusan.tgl_persetujuan, penghapusan.tgl_kerusakan) as tanggal, "Penghapusan" as manajemen, barang.nama_barang, penghapusan.keterangan, ruangan.nama_ruangan, penghapusan.pemasukan, 0 as pengeluaran');
        $builder->join('barang', 'barang.id = penghapusan.id_barang', 'left');
        $builder->join('ruangan', 'ruangan.id = penghapusan.id_ruangan', 'left');
        $penghapusan = $builder->get()->getResultArray();
        $unifiedData = array_merge($unifiedData, $penghapusan);

        // Filters
        $startDate = $this->request->getGet('start_date');
        $endDate = $this->request->getGet('end_date');
        $bulan = $this->request->getGet('bulan');
        $tahun = $this->request->getGet('tahun');
        $manajemen = $this->request->getGet('manajemen');

        $filteredData = array_filter($unifiedData, function($row) use ($startDate, $endDate, $bulan, $tahun, $manajemen) {
            $tgl = $row['tanggal'];
            if (!$tgl) return false;

            $tglDate = date('Y-m-d', strtotime($tgl));
            
            if ($startDate && $tglDate < $startDate) return false;
            if ($endDate && $tglDate > $endDate) return false;
            
            if ($bulan) {
                if (date('m', strtotime($tgl)) != str_pad($bulan, 2, '0', STR_PAD_LEFT)) return false;
            }
            if ($tahun) {
                if (date('Y', strtotime($tgl)) != $tahun) return false;
            }
            if ($manajemen && $manajemen != 'All') {
                if ($row['manajemen'] != $manajemen) return false;
            }

            return true;
        });

        // Sort by Tanggal DESC
        usort($filteredData, function($a, $b) {
            return strtotime($b['tanggal']) - strtotime($a['tanggal']);
        });

        // Calculate Totals
        $totalPemasukan = 0;
        $totalPengeluaran = 0;
        foreach ($filteredData as $row) {
            $totalPemasukan += $row['pemasukan'];
            $totalPengeluaran += $row['pengeluaran'];
        }

        $data = [
            'title' => 'Laporan Manajemen Aset',
            'data'  => $filteredData,
            'total_pemasukan' => $totalPemasukan,
            'total_pengeluaran' => $totalPengeluaran,
            'filters' => [
                'start_date' => $startDate,
                'end_date'   => $endDate,
                'bulan'      => $bulan,
                'tahun'      => $tahun,
                'manajemen'  => $manajemen
            ]
        ];

        return view('laporan/manajemen_aset', $data);
    }
}
