<?php

namespace App\Controllers;

use App\Models\BarangModel;
use App\Models\RuanganModel;
use App\Models\PeminjamanModel;
use App\Models\PerbaikanModel;

class Dashboard extends BaseController
{
    public function index()
    {
        $barangModel = new BarangModel();
        $ruanganModel = new RuanganModel();
        $peminjamanModel = new PeminjamanModel();
        $perbaikanModel = new PerbaikanModel();
        
        $tanahModel = new \App\Models\TanahModel();
        $bangunanModel = new \App\Models\BangunanModel();
        $bukuModel = new \App\Models\BukuModel();

        // 1. Total Nilai Barang
        $barangData = $barangModel->findAll();
        $totalBarang_Count = count($barangData);
        $totalNilaiBarang_Awal = 0;
        $totalNilaiPenyusutan_Barang = 0;
        $totalNilaiSekarang_Barang = 0;

        foreach($barangData as $b) {
            $umur_terpakai = date('Y') - $b['tahun_perolehan'];
            $umur_penyusutan = min(max($umur_terpakai, 0), $b['umur_ekonomis']);
            $penyusutan_total = $b['penyusutan_per_tahun'] * $b['jumlah'];
            $penyusutan = $penyusutan_total * $umur_penyusutan;
            $ns = max($b['harga_total'] - $penyusutan, 0);

            $totalNilaiBarang_Awal += $b['harga_total'];
            $totalNilaiPenyusutan_Barang += $penyusutan;
            $totalNilaiSekarang_Barang += $ns;
        }

        // 2. Total Nilai Buku
        $bukuData = $bukuModel->findAll();
        $totalBuku_Count = count($bukuData);
        $totalNilaiBuku_Awal = 0;
        $totalNilaiPenyusutan_Buku = 0;
        $totalNilaiSekarang_Buku = 0;

        foreach($bukuData as $b) {
            $tahun_pengadaan = date('Y', strtotime($b['tgl_pengadaan']));
            $umur_terpakai = date('Y') - $tahun_pengadaan;
            $umur_ekonomis = $b['umur_ekonomis'] ?? 5;
            $umur_penyusutan = min(max($umur_terpakai, 0), $umur_ekonomis);
            $penyusutan_per_tahun = $b['penyusutan_per_tahun'] ?? ($b['harga_satuan'] / max($umur_ekonomis, 1));
            $penyusutan_total = $penyusutan_per_tahun * $b['jumlah'];
            $penyusutan = $penyusutan_total * $umur_penyusutan;
            $ns = max($b['total_harga'] - $penyusutan, 0);

            $totalNilaiBuku_Awal += $b['total_harga'];
            $totalNilaiPenyusutan_Buku += $penyusutan;
            $totalNilaiSekarang_Buku += $ns;
        }

        // 3. Total Nilai Tanah & Bangunan
        $tanahData = $tanahModel->findAll();
        $totalNilaiTanah_Awal = 0;
        $totalNilaiKenaikan_Tanah = 0;
        $totalNilaiSekarang_Tanah = 0;
        foreach($tanahData as $t) {
            $totalNilaiTanah_Awal += $t['nilai_perolehan'];
            $umur = max(date('Y') - $t['tahun_perolehan'], 0);
            $kenaikan = $t['kenaikan_per_tahun'] * $umur;
            $totalNilaiKenaikan_Tanah += $kenaikan;
            $totalNilaiSekarang_Tanah += max($t['nilai_perolehan'] + $kenaikan, 0);
        }

        $bangunanData = $bangunanModel->findAll();
        $totalNilaiBangunan_Awal = 0;
        $totalNilaiPenyusutan_Bangunan = 0;
        $totalNilaiSekarang_Bangunan = 0;
        foreach($bangunanData as $b) {
            $totalNilaiBangunan_Awal += $b['nilai_perolehan'];
            $umur = max(date('Y') - $b['tahun_dibangun'], 0);
            $penyusutan = $b['penyusutan_per_tahun'] * $umur;
            $totalNilaiPenyusutan_Bangunan += $penyusutan;
            $totalNilaiSekarang_Bangunan += max($b['nilai_perolehan'] - $penyusutan, 0);
        }

        $totalTanahBangunan = $totalNilaiSekarang_Tanah + $totalNilaiSekarang_Bangunan;

        // 4. Total Aset Keseluruhan
        $totalAset = $totalNilaiSekarang_Barang + $totalTanahBangunan + $totalNilaiSekarang_Buku;

        // 5. Total Peminjaman, Perbaikan, Pengajuan, Penghapusan & Biaya
        $pengajuanModel = new \App\Models\PengajuanModel();
        $penghapusanModel = new \App\Models\PenghapusanModel();

        $peminjamanData = $peminjamanModel->findAll();
        $totalPeminjaman_Count = count($peminjamanData);
        $totalPeminjaman_Biaya = array_sum(array_column($peminjamanData, 'biaya')); // Pemasukan

        $perbaikanData = $perbaikanModel->findAll();
        $totalPerbaikan_Count = count($perbaikanData);
        $totalPerbaikan_Biaya = array_sum(array_column($perbaikanData, 'biaya')); // Pengeluaran

        $pengajuanData = $pengajuanModel->findAll();
        $totalPengajuan_Count = count($pengajuanData);
        $totalPengajuan_Biaya = array_sum(array_column($pengajuanData, 'biaya')); // Pengeluaran

        $penghapusanData = $penghapusanModel->findAll();
        $totalPenghapusan_Count = count($penghapusanData);
        $totalPenghapusan_Biaya = array_sum(array_column($penghapusanData, 'pemasukan')); // Pemasukan

        // 6. Chart Data (Manajemen Aset per Year)
        // Dimulai dari tahun 2026
        $chartYears = [2026, 2027, 2028, 2029];
        $chartData = [
            'labels' => $chartYears,
            'peminjaman' => array_fill(0, count($chartYears), 0),
            'perbaikan' => array_fill(0, count($chartYears), 0),
            'pengajuan' => array_fill(0, count($chartYears), 0),
            'penghapusan' => array_fill(0, count($chartYears), 0)
        ];

        foreach($peminjamanData as $p) {
            $year = date('Y', strtotime($p['tgl_peminjaman'] ?? $p['created_at'] ?? date('Y')));
            $index = array_search($year, $chartYears);
            if($index !== false) $chartData['peminjaman'][$index]++;
        }
        foreach($perbaikanData as $p) {
            $year = date('Y', strtotime($p['tgl_perbaikan'] ?? $p['created_at'] ?? date('Y')));
            $index = array_search($year, $chartYears);
            if($index !== false) $chartData['perbaikan'][$index]++;
        }
        foreach($pengajuanData as $p) {
            $year = date('Y', strtotime($p['tgl_pengajuan'] ?? $p['created_at'] ?? date('Y')));
            $index = array_search($year, $chartYears);
            if($index !== false) $chartData['pengajuan'][$index]++;
        }
        foreach($penghapusanData as $p) {
            $year = date('Y', strtotime($p['tgl_persetujuan'] ?? $p['tgl_kerusakan'] ?? date('Y')));
            $index = array_search($year, $chartYears);
            if($index !== false) $chartData['penghapusan'][$index]++;
        }

        $data = [
            'title' => 'Dashboard',
            'total_barang' => $totalBarang_Count,
            'total_ruangan' => $ruanganModel->countAll(),
            
            // Transaction Counts & Costs
            'total_peminjaman' => $totalPeminjaman_Count,
            'total_peminjaman_biaya' => $totalPeminjaman_Biaya,
            'total_perbaikan' => $totalPerbaikan_Count,
            'total_perbaikan_biaya' => $totalPerbaikan_Biaya,
            'total_pengajuan' => $totalPengajuan_Count,
            'total_pengajuan_biaya' => $totalPengajuan_Biaya,
            'total_penghapusan' => $totalPenghapusan_Count,
            'total_penghapusan_biaya' => $totalPenghapusan_Biaya,

            // Chart Data
            'chartData' => json_encode($chartData),

            // Barang Detailed Data
            'total_nilai_barang_awal' => $totalNilaiBarang_Awal,
            'total_nilai_penyusutan_barang' => $totalNilaiPenyusutan_Barang,
            'total_nilai_sekarang_barang' => $totalNilaiSekarang_Barang,

            // Buku Detailed Data
            'total_buku' => $totalBuku_Count,
            'total_nilai_buku_awal' => $totalNilaiBuku_Awal,
            'total_nilai_penyusutan_buku' => $totalNilaiPenyusutan_Buku,
            'total_nilai_sekarang_buku' => $totalNilaiSekarang_Buku,

            // Tanah Detailed Data
            'total_nilai_tanah_awal' => $totalNilaiTanah_Awal,
            'total_nilai_kenaikan_tanah' => $totalNilaiKenaikan_Tanah,
            'total_nilai_sekarang_tanah' => $totalNilaiSekarang_Tanah,

            // Bangunan Detailed Data
            'total_nilai_bangunan_awal' => $totalNilaiBangunan_Awal,
            'total_nilai_penyusutan_bangunan' => $totalNilaiPenyusutan_Bangunan,
            'total_nilai_sekarang_bangunan' => $totalNilaiSekarang_Bangunan,

            // Overall
            'total_nilai_tanah_bangunan' => $totalTanahBangunan,
            'total_nilai_aset' => $totalAset,
            
            // Mock data for charts if DB is empty
            'chart_labels' => "['Jan', 'Feb', 'Mar', 'Apr', 'Mei', 'Jun']",
            'chart_data' => "[12, 19, 3, 5, 2, 3]",
        ];

        return view('dashboard/index', $data);
    }
}
