<?php

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\DB;
use Illuminate\Http\Request;
use App\Models\Keuangan;
use Carbon\Carbon;

class LaporanController extends Controller
{
    public function index(Request $request)
    {
        // Ambil daftar tahun dan bulan yang tersedia di database
        $years = Keuangan::selectRaw('YEAR(tanggal_pembayaran) as tahun')->distinct()->orderBy('tahun', 'desc')->pluck('tahun');
        $months = [
            1 => 'Januari', 2 => 'Februari', 3 => 'Maret', 4 => 'April',
            5 => 'Mei', 6 => 'Juni', 7 => 'Juli', 8 => 'Agustus',
            9 => 'September', 10 => 'Oktober', 11 => 'November', 12 => 'Desember'
        ];

        // Ambil filter dari request
        $tahun = $request->input('tahun', date('Y'));
        $bulan = $request->input('bulan', '');

        // Query laporan keuangan utama
        $query = Keuangan::selectRaw(
            'YEAR(tanggal_pembayaran) as tahun, MONTH(tanggal_pembayaran) as bulan, 
            SUM(jumlah_pembayaran) as total_pemasukan, 
            (SELECT SUM(jumlah_pengeluaran) 
             FROM pengeluaran 
             WHERE YEAR(tanggal_pengeluaran) = YEAR(tanggal_pembayaran) 
             AND MONTH(tanggal_pengeluaran) = MONTH(tanggal_pembayaran)
            ) as total_pengeluaran,
            (SUM(jumlah_pembayaran) - COALESCE((SELECT SUM(jumlah_pengeluaran) 
             FROM pengeluaran 
             WHERE YEAR(tanggal_pengeluaran) = YEAR(tanggal_pembayaran) 
             AND MONTH(tanggal_pengeluaran) = MONTH(tanggal_pembayaran)), 0)
            ) as keuntungan_bersih'
        )
        ->where('status_transaksi', 'Lunas')
        ->whereYear('tanggal_pembayaran', $tahun)
        ->groupBy('tahun', 'bulan')
        ->orderBy('tahun', 'desc')
        ->orderBy('bulan', 'desc');
        
        if ($bulan) {
            $query->whereMonth('dibuat_pada', $bulan);
        }

        $filteredLaporan = $query->get();

        // Ambil detail pemasukan
        $detailPemasukan = Keuangan::whereYear('tanggal_pembayaran', $tahun)
    ->where('status_transaksi', 'Lunas')
    ->when($bulan, fn($q) => $q->whereMonth('tanggal_pembayaran', $bulan))
    ->orderBy('tanggal_pembayaran', 'desc')
    ->get();

    
    $detailPengeluaran = DB::table('pengeluaran')
    ->whereYear('tanggal_pengeluaran', $tahun)
    ->when($bulan, fn($q) => $q->whereMonth('tanggal_pengeluaran', $bulan))
    ->orderBy('tanggal_pengeluaran', 'desc')
    ->get();
    

        return view('pemilik.laporan', compact('years', 'months', 'filteredLaporan', 'detailPemasukan', 'detailPengeluaran'));
    }
}
