<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\Expense;
use App\Models\Transaksi;
use App\Models\Finance;

class ExpenseController extends Controller
{
    /**
     * Menampilkan daftar pengeluaran.
     */
    public function index(Request $request)
    {
        $query = Expense::query();

        if ($request->has('search')) {
            $search = $request->search;
            $query->where('keterangan', 'LIKE', "%$search%")
                  ->orWhere('jumlah_pengeluaran', 'LIKE', "%$search%")
                  ->orWhere('tanggal_pengeluaran', 'LIKE', "%$search%");
        }

        // Mengambil semua data pengeluaran
        $pengeluaran = $query->orderBy('tanggal_pengeluaran', 'desc')->get();

        return view('admin.expense', compact('pengeluaran'));
    }

    /**
     * Menampilkan form untuk menambahkan pengeluaran baru.
     */
    public function create()
    {
        return view('admin.createexpense');
    }

    /**
     * Menyimpan data pengeluaran baru ke database.
     */
    public function store(Request $request)
{
    $request->validate([
        'keterangan'         => 'required|string|max:255',
        'jumlah_pengeluaran' => 'required',
        'tanggal_pengeluaran'=> 'required|date',
    ]);

    // Hilangkan titik/koma agar jumlah valid
    $jumlah = str_replace(['.', ','], '', $request->jumlah_pengeluaran);

    Expense::create([
        'keterangan'          => $request->keterangan,
        'jumlah_pengeluaran'  => $jumlah,
        'tanggal_pengeluaran' => $request->tanggal_pengeluaran,
    ]);

    $this->updateFinance();

    return redirect()->route('admin.expense')->with('success', 'Pengeluaran berhasil ditambahkan.');
}

    /**
     * Menampilkan form untuk mengedit pengeluaran.
     */
    public function edit($id_pengeluaran)
    {
        $pengeluaran = Expense::findOrFail($id_pengeluaran);
        return view('admin.editexpense', compact('pengeluaran'));
    }

    /**
     * Memperbarui data pengeluaran di database.
     */
    public function update(Request $request, $id_pengeluaran)
{
    $request->validate([
        'keterangan'         => 'required|string|max:255',
        'jumlah_pengeluaran' => 'required',
        'tanggal_pengeluaran'=> 'required|date',
    ]);

    $pengeluaran = Expense::findOrFail($id_pengeluaran);

    // Hilangkan titik/koma dari input user
    $jumlah = str_replace(['.', ','], '', $request->jumlah_pengeluaran);

    $pengeluaran->update([
        'keterangan'          => $request->keterangan,
        'jumlah_pengeluaran'  => $jumlah,
        'tanggal_pengeluaran' => $request->tanggal_pengeluaran,
    ]);

    $this->updateFinance();

    return redirect()->route('admin.expense')->with('success', 'Pengeluaran berhasil diperbarui.');
}

    /**
     * Menghapus data pengeluaran dari database.
     */
    public function destroy($id_pengeluaran)
    {
        $pengeluaran = Expense::findOrFail($id_pengeluaran);
        $pengeluaran->delete();

        // Update data keuangan
        $this->updateFinance();

        return redirect()->route('admin.expense')->with('success', 'Pengeluaran berhasil dihapus.');
    }

    /**
     * Fungsi untuk memperbarui data keuangan di tabel Finance.
     */
    private function updateFinance()
    {
        $tanggalHariIni = now()->format('Y-m-d');
    
        $totalPemasukan   = Transaksi::sum('jumlah_pembayaran');
        $totalPengeluaran = Expense::sum('jumlah_pengeluaran');
        $totalKeuntungan  = $totalPemasukan - $totalPengeluaran;
    
        // Cek apakah sudah ada data finance untuk hari ini
        $finance = Finance::where('tanggal', $tanggalHariIni)->first();
    
        if ($finance) {
            // Update data yang sudah ada
            $finance->update([
                'pemasukan'   => $totalPemasukan,
                'pengeluaran' => $totalPengeluaran,
                'keuntungan'  => $totalKeuntungan,
                'keterangan'  => 'Update otomatis dari data pengeluaran'
            ]);
        } else {
            // Buat data baru
            Finance::create([
                'tanggal'     => $tanggalHariIni,
                'pemasukan'   => $totalPemasukan,
                'pengeluaran' => $totalPengeluaran,
                'keuntungan'  => $totalKeuntungan,
                'keterangan'  => 'Update otomatis dari data pengeluaran'
            ]);
        }
    }
}    
