<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\Pendapatan;
use App\Models\Pengeluaran;
use Illuminate\Support\Facades\Log;
use Carbon\Carbon;
use Barryvdh\DomPDF\Facade\Pdf;
use Illuminate\Support\Facades\Auth;

class KeuanganController extends Controller
{

    public function indexKeuangan(Request $request)
    {
        try {
            $bulan = $request->get('bulan', Carbon::now()->format('m'));
            $tahun = $request->get('tahun', Carbon::now()->format('Y'));
            if ($tahun == Carbon::now()->format('Y') && $bulan > Carbon::now()->format('m')) {
                $bulan = Carbon::now()->format('m'); 
            }
            if ($tahun > Carbon::now()->format('Y')) {
                $tahun = Carbon::now()->format('Y'); 
            }
            $namaBulan = Carbon::create()->month($bulan)->translatedFormat('F');
            $pendapatan = Pendapatan::where('user_id', Auth::id())
                ->whereYear('tanggal_transaksi', $tahun)
                ->whereMonth('tanggal_transaksi', $bulan)
                ->orderBy('tanggal_transaksi', 'asc')
                ->get()
                ->map(function ($item) {
                    return [
                        'tanggal' => $item->tanggal_transaksi,
                        'keterangan' => $item->kategori,
                        'jumlah' => $item->jumlah * $item->harga_per_satuan,
                        'tipe' => 'pendapatan',
                    ];
                });

            $pengeluaran = Pengeluaran::where('user_id', Auth::id())
                ->whereYear('tanggal_pembelian', $tahun)
                ->whereMonth('tanggal_pembelian', $bulan)
                ->orderBy('tanggal_pembelian', 'asc')
                ->get()
                ->map(function ($item) {
                    return [
                        'tanggal' => $item->tanggal_pembelian,
                        'keterangan' => $item->category . ' - ' . $item->description,
                        'jumlah' => $item->jumlah * $item->harga_per_satuan,
                        'tipe' => 'pengeluaran',
                    ];
                });

            $transaksi = collect($pendapatan)->merge($pengeluaran)->sortBy('tanggal');

            $totalPendapatan = $pendapatan->sum('jumlah');
            $totalPengeluaran = $pengeluaran->sum('jumlah');
            $labaBersih = $totalPendapatan - $totalPengeluaran;

            $totalPendapatanHarian = $transaksi->filter(fn($trx) => $trx['tipe'] === 'pendapatan')->sum('jumlah');
            $totalPengeluaranHarian = $transaksi->filter(fn($trx) => $trx['tipe'] === 'pengeluaran')->sum('jumlah');
            $totalSaldoHarian = $totalPendapatanHarian - $totalPengeluaranHarian;

            return view('finance-management', compact(
                'transaksi', 
                'totalPendapatan', 
                'totalPengeluaran', 
                'labaBersih', 
                'bulan', 
                'tahun', 
                'namaBulan',
                'totalPendapatanHarian',
                'totalPengeluaranHarian',
                'totalSaldoHarian'
            ));
        } catch (\Exception $e) {
            Log::error('Gagal memuat laporan keuangan: ' . $e->getMessage());

            return redirect()->route('finance-management')->with([
                'status' => 'error',
                'message' => 'Terjadi kesalahan saat memuat laporan keuangan.',
            ]);
        }
    }

    public function exportPDF(Request $request)
{
    $bulan = $request->get('bulan', Carbon::now()->format('m'));
    $tahun = $request->get('tahun', Carbon::now()->format('Y'));
    $namaBulan = Carbon::create()->month($bulan)->translatedFormat('F');
    $userId = Auth::id(); // Simpan user ID dalam variabel agar konsisten

    $pendapatan = Pendapatan::where('user_id', $userId)
        ->whereYear('tanggal_transaksi', $tahun)
        ->whereMonth('tanggal_transaksi', $bulan)
        ->orderBy('tanggal_transaksi', 'asc')
        ->get()
        ->map(fn($item) => [
            'tanggal' => $item->tanggal_transaksi,
            'keterangan' => $item->kategori,
            'jumlah' => $item->jumlah * $item->harga_per_satuan,
            'tipe' => 'pendapatan',
        ]);

    $pengeluaran = Pengeluaran::where('user_id', $userId) // Tambahkan filter user_id di sini
        ->whereYear('tanggal_pembelian', $tahun)
        ->whereMonth('tanggal_pembelian', $bulan)
        ->orderBy('tanggal_pembelian', 'asc')
        ->get()
        ->map(fn($item) => [
            'tanggal' => $item->tanggal_pembelian,
            'keterangan' => $item->category . ' - ' . $item->description,
            'jumlah' => $item->jumlah * $item->harga_per_satuan,
            'tipe' => 'pengeluaran',
        ]);

    $transaksi = collect($pendapatan)->merge($pengeluaran)->sortBy('tanggal');
    $totalPendapatan = $pendapatan->sum('jumlah');
    $totalPengeluaran = $pengeluaran->sum('jumlah');
    $totalSaldo = $totalPendapatan - $totalPengeluaran;

    // Tambahkan nama user ke dalam view untuk ditampilkan dalam PDF
    $user = Auth::user();
    
    $pdf = Pdf::loadView('cetak.laporan-keuangan', compact(
        'transaksi', 'totalPendapatan', 'totalPengeluaran', 'totalSaldo', 'namaBulan', 'tahun', 'user'
    ));

    return $pdf->download("Laporan-Keuangan-{$user->name}-{$namaBulan}-{$tahun}.pdf");
}
}