<?php

namespace App\Http\Controllers;

use App\Models\Expense;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Carbon\Carbon;

class ExpenseController extends Controller
{
    //     public function index()
    // {
    //     // Ambil data pengeluaran dan urutkan berdasarkan waktu pembuatan (created_at) secara descending
    //     $expense = Expense::orderBy('id', 'desc')->get();
    //     return view('expense', compact('expense'));
    // }

    public function index(Request $request)
    {
        $bulan = now()->month;
        $tahun = now()->year;

        // Ambil semua data pengeluaran bulan dan tahun ini
        $expense = Expense::whereYear('tanggal', $tahun)->whereMonth('tanggal', $bulan)->orderBy('tanggal', 'desc')->get();

        $totalPengeluaranTahunIni = Expense::whereYear('tanggal', $tahun)->sum('total_pengeluaran');

        $totalPengeluaranBulanIni = Expense::whereYear('tanggal', $tahun)->whereMonth('tanggal', $bulan)->sum('total_pengeluaran');

        $bulanLalu = $bulan - 1 <= 0 ? 12 : $bulan - 1;
        $tahunLalu = $bulan - 1 <= 0 ? $tahun - 1 : $tahun;

        $totalPengeluaranBulanLalu = Expense::whereYear('tanggal', $tahunLalu)->whereMonth('tanggal', $bulanLalu)->sum('total_pengeluaran');

        $jumlahTransaksiBulanIni = Expense::whereYear('tanggal', $tahun)->whereMonth('tanggal', $bulan)->count();

        $rataRataPengeluaranBulanIni = $jumlahTransaksiBulanIni > 0 ? $totalPengeluaranBulanIni / $jumlahTransaksiBulanIni : 0;

        $jumlahTransaksiBulanLalu = Expense::whereYear('tanggal', $tahunLalu)->whereMonth('tanggal', $bulanLalu)->count();

        $rataRataPengeluaranBulanLalu = $jumlahTransaksiBulanLalu > 0 ? $totalPengeluaranBulanLalu / $jumlahTransaksiBulanLalu : 0;

        $isPengeluaranTahunIniNaik = $totalPengeluaranTahunIni > $totalPengeluaranBulanLalu;
        $isPengeluaranBulanIniNaik = $totalPengeluaranBulanIni > $totalPengeluaranBulanLalu;
        $isRataRataPengeluaranNaik = $rataRataPengeluaranBulanIni > $rataRataPengeluaranBulanLalu;

        // Selisih Pengeluaran Tahun Ini - Tahun Lalu
        $selisihPengeluaranTahunIni = $totalPengeluaranTahunIni - $totalPengeluaranBulanLalu;
        $isPengeluaranTahunIniNaik = $selisihPengeluaranTahunIni > 0;

        // Selisih Pengeluaran Bulan Ini - Bulan Lalu
        $selisihPengeluaranBulanIni = $totalPengeluaranBulanIni - $totalPengeluaranBulanLalu;
        $isPengeluaranBulanIniNaik = $selisihPengeluaranBulanIni > 0;

        // Selisih Rata-rata Pengeluaran Bulan Ini - Bulan Lalu
        $selisihRataRataPengeluaran = $rataRataPengeluaranBulanIni - $rataRataPengeluaranBulanLalu;
        $isRataRataPengeluaranNaik = $selisihRataRataPengeluaran > 0;

        return view(
            'expense',
            compact(
                'expense', // <--- Tambahkan ini!
                'totalPengeluaranTahunIni',
                'totalPengeluaranBulanIni',
                'totalPengeluaranBulanLalu',
                'rataRataPengeluaranBulanIni',
                'rataRataPengeluaranBulanLalu',
                'bulan',
                'tahun',
                'isPengeluaranTahunIniNaik',
                'isPengeluaranBulanIniNaik',
                'isRataRataPengeluaranNaik',
                'selisihPengeluaranTahunIni',
                'selisihPengeluaranBulanIni',
                'selisihRataRataPengeluaran',
            ),
        );
    }

    public function store(Request $request)
    {
        // Validasi input
        $request->validate([
            'nama_pengeluaran' => 'required|string|max:255',
            'kategori_pengeluaran' => 'required|string',
            'deskripsi_pengeluaran' => 'required|string',
            'total_pengeluaran' => 'required|numeric',
            'waktu' => 'required',
            'tanggal' => 'required|date',
        ]);

        // Simpan data ke database
        Expense::create([
            'nama_pengeluaran' => $request->nama_pengeluaran,
            'kategori_pengeluaran' => $request->kategori_pengeluaran,
            'deskripsi_pengeluaran' => $request->deskripsi_pengeluaran,
            'total_pengeluaran' => $request->total_pengeluaran,
            'waktu' => Carbon::parse($request->waktu)->format('H:i:s'),
            'tanggal' => Carbon::parse($request->tanggal)->format('Y-m-d'),
        ]);

        // Redirect kembali dengan pesan sukses
        return redirect()->back()->with('success', 'Data pengeluaran berhasil ditambahkan!');
    }

    public function update(Request $request, $id)
    {
        // Validasi data yang masuk
        $request->validate([
            'nama_pengeluaran' => 'required|string|max:255',
            'kategori_pengeluaran' => 'required|string',
            'deskripsi_pengeluaran' => 'required|string',
            'total_pengeluaran' => 'required|numeric',
            'waktu' => 'required',
            'tanggal' => 'required|date',
        ]);

        // Temukan data pengeluaran berdasarkan ID
        $expense = Expense::findOrFail($id);

        // Perbarui data pengeluaran
        $expense->update([
            'nama_pengeluaran' => $request->nama_pengeluaran,
            'kategori_pengeluaran' => $request->kategori_pengeluaran,
            'deskripsi_pengeluaran' => $request->deskripsi_pengeluaran,
            'total_pengeluaran' => $request->total_pengeluaran,
            'waktu' => $request->waktu,
            'tanggal' => $request->tanggal,
        ]);

        // Redirect dengan pesan sukses
        return redirect()->back()->with('success', 'Data pengeluaran berhasil diperbarui.');
    }

    public function destroy($id)
    {
        $expense = Expense::findOrFail($id);
        $expense->delete();

        return response()->json(['success' => true]);
    }
}
