<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\User;
use App\Models\Room;
use App\Models\Booking;
use App\Models\Transaksi;
use App\Models\Expense;
use App\Models\Finance;

class DashboardPemilikController extends Controller
{
    public function index(Request $request)
    {
        // Hitung total customer, kamar, dan booking
        $totalUsers = User::count();
        $totalRooms = Room::count();
        $totalBookings = Booking::count();

        // Ambil total pemasukan dari tabel transaksi
        $totalPemasukan = Transaksi::sum('jumlah_pembayaran');

        // Ambil total pengeluaran dari tabel pengeluaran
        $totalPengeluaran = Expense::sum('jumlah_pengeluaran');

        // Hitung keuntungan (pemasukan - pengeluaran)
        $totalKeuntungan = $totalPemasukan - $totalPengeluaran;

        // Ambil daftar tahun unik dari tabel finance
        $tahunList = Finance::selectRaw('YEAR(tanggal) as tahun')
            ->distinct()
            ->orderBy('tahun', 'asc')
            ->pluck('tahun')
            ->toArray();

        // Ambil tahun dari request atau default ke tahun sekarang
        $tahunTerpilih = $request->input('tahun', now()->year);

        // Ambil data pemasukan dan pengeluaran per bulan berdasarkan tahun terpilih
        $transactions = Finance::selectRaw('DATE_FORMAT(tanggal, "%Y-%m") as month, 
                            SUM(pemasukan) as pemasukan, 
                            SUM(pengeluaran) as pengeluaran')
            ->when($tahunTerpilih !== 'all', function ($query) use ($tahunTerpilih) {
                $query->whereYear('tanggal', $tahunTerpilih);
            })
            ->groupBy('month')
            ->orderBy('month')
            ->get();

        // Memproses data untuk grafik
        $labels = $transactions->pluck('month')->toArray();
        $pemasukan = $transactions->pluck('pemasukan')->toArray();
        $pengeluaran = $transactions->pluck('pengeluaran')->toArray();
        $keuntungan = array_map(function ($p, $q) {
            return $p - $q;
        }, $pemasukan, $pengeluaran);

        // Ambil data status kamar (tersedia, terisi, maintenance)
        $data_kamar = [
            'Terisi' => Room::where('status', 'terisi')->count(),
            'Kosong' => Room::where('status', 'tersedia')->count(),
            'Rusak'  => Room::where('status', 'maintenance')->count(),
        ];

        // Kirim semua data ke view
        return view('pemilik.dashboard', compact(
            'totalUsers',
            'totalRooms',
            'totalBookings',
            'totalPemasukan',
            'totalPengeluaran',
            'totalKeuntungan',
            'labels',
            'pemasukan',
            'pengeluaran',
            'keuntungan',
            'tahunList',
            'tahunTerpilih',
            'data_kamar'
        ));
    }
}
