<?php

namespace App\Http\Controllers;

use App\Models\Pengeluaran;
use Illuminate\Http\Request;
use Illuminate\Support\Str;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Carbon;

class PengeluaranController extends Controller
{
    public function index(Request $request)
{
    $query = Pengeluaran::query();

    // Proses filter
    if ($request->has('filter')) {
        $filter = $request->filter;

        if ($filter === 'hari') {
            $query->whereDate('tanggal', now());
        } elseif ($filter === 'minggu') {
            $query->whereBetween('tanggal', [now()->startOfWeek(), now()->endOfWeek()]);
        } elseif ($filter === 'bulan') {
            $query->whereMonth('tanggal', now()->month)
                  ->whereYear('tanggal', now()->year);
        } elseif ($filter === 'tahun') {
            $query->whereYear('tanggal', now()->year);
        }
    }

    $pengeluarans = $query->orderBy('tanggal', 'desc')->paginate(10);

    // Hitung total
    $total = $query->get()->reduce(function ($carry, $item) {
        if ($item->kategori === 'uang') {
            return $carry + $item->jumlah;
        } elseif ($item->kategori === 'barang' && $item->quantity && $item->harga) {
            return $carry + ($item->quantity * $item->harga);
        }
        return $carry;
    }, 0);

    return view('transaksi.pengeluaran.index', compact('pengeluarans', 'total'));
}

    public function create()
    {
        return view('transaksi.pengeluaran.create');
    }

    public function store(Request $request)
{
    $request->validate([
        'tanggal' => 'required|date',
        'kategori' => 'required',
        'nama' => 'required',
        'jumlah' => 'required|numeric',
        'harga' => 'nullable|numeric',
        'quantity' => 'nullable|integer',
        'keterangan' => 'nullable|string',
        'bukti' => 'nullable|image|mimes:jpg,jpeg,png,gif,svg|max:2048',
    ]);

    $data = $request->only(['tanggal', 'kategori', 'nama', 'jumlah', 'harga', 'quantity', 'keterangan']);

    if ($request->hasFile('bukti')) {
        $file = $request->file('bukti');
        $filename = time() . '_' . $file->getClientOriginalName();
        $file->storeAs('public/bukti_pengeluaran', $filename);
        $data['bukti'] = $filename;

        // DEBUG CEK
        \Log::info('File bukti disimpan: ' . $filename);
    } else {
        // DEBUG CEK
        \Log::warning('TIDAK ADA FILE BUKTI DIUPLOAD');
    }

    Pengeluaran::create($data);

    return redirect()->route('pengeluaran.index')->with('success', 'Data berhasil disimpan.');
}

    public function edit(Pengeluaran $pengeluaran)
    {
        return view('transaksi.pengeluaran.edit', compact('pengeluaran'));
    }

    public function update(Request $request, Pengeluaran $pengeluaran)
    {
        $request->validate([
            'tanggal' => 'required|date',
            'kategori' => 'required|string',
            'nama' => 'required|string|max:255',
            'jumlah' => 'required|numeric',
            'quantity' => 'nullable|numeric',
            'harga' => 'nullable|numeric',
            'keterangan' => 'nullable|string|max:255',
            'bukti' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg|max:2048',
        ]);

        $data = $request->all();

        if ($request->kategori !== 'barang') {
            $data['quantity'] = null;
            $data['harga'] = 0;
        } else {
            $data['jumlah'] = $request->quantity * $request->harga;
        }

        // Simpan gambar baru jika ada
        if ($request->hasFile('bukti')) {
            $file = $request->file('bukti');
            $filename = time() . '_' . $file->getClientOriginalName();
            $file->storeAs('public/bukti_pengeluaran', $filename);
            $data['bukti'] = $filename; // Simpan hanya nama file ke database
        }                       

        $pengeluaran->update($data);

        return redirect()->route('pengeluaran.index')->with('success', 'Data berhasil diperbarui.');
    }

    public function destroy(Pengeluaran $pengeluaran)
{
    if ($pengeluaran->bukti && Storage::exists('public/bukti_pengeluaran/' . $pengeluaran->bukti)) {
        Storage::delete('public/bukti_pengeluaran/' . $pengeluaran->bukti);
    }

    $pengeluaran->delete();

    return redirect()->route('pengeluaran.index')->with('success', 'Data berhasil dihapus.');
}

    
}
