<?php

namespace App\Http\Controllers;

use App\Models\Barang;
use Illuminate\Http\Request;

class BarangController extends Controller
{
    // Menampilkan Daftar Sembako Lengkap dengan Filter Kategori Terpadu
    public function index(Request $request)
    {
        if (!session()->has('admin_logged')) {
            return redirect('/login');
        }

        // 1. Ambil daftar semua kategori unik langsung dari database untuk tombol filter tab
        $daftarKategori = Barang::select('kategori')->distinct()->whereNotNull('kategori')->pluck('kategori');

        // 2. Logika Filter: Jika admin mengklik salah satu kategori tab
        $kategoriDipilih = $request->query('kategori');

        if ($kategoriDipilih) {
            $barangs = Barang::where('kategori', $kategoriDipilih)->latest()->get();
        } else {
            $barangs = Barang::latest()->get(); // Tampilkan semua jika tidak ada filter
        }

        return view('admin.barang_index', compact('barangs', 'daftarKategori', 'kategoriDipilih'));
    }

    // Menambah Item Sembako Baru beserta Deskripsi & Gambar
    public function store(Request $request)
    {
        $request->validate([
            'nama_barang' => 'required|string|max:255',
            'deskripsi'   => 'nullable|string',
            'kategori'    => 'required|string',
            'harga'       => 'required|numeric|min:0',
            'stok'        => 'required|numeric|min:0',
            'foto'        => 'nullable|image|mimes:jpeg,png,jpg|max:2048'
        ]);

        $data = $request->all();

        // Logika upload foto baru ke folder public/images/
        if ($request->hasFile('foto')) {
            $namaFoto = time() . '_' . $request->file('foto')->getClientOriginalName();
            $request->file('foto')->move(public_path('images'), $namaFoto);
            $data['foto'] = $namaFoto;
        }

        Barang::create($data);
        return redirect()->back()->with('success', 'Produk sembako baru berhasil ditambahkan!');
    }

    // Mengupdate Penuh Data Sembako (Harga, Stok, Deskripsi, Kategori, & Penanganan Gambar Baru)
    public function update(Request $request, $id)
    {
        $request->validate([
            'harga'     => 'required|numeric|min:0',
            'stok'      => 'required|numeric|min:0',
            'deskripsi' => 'nullable|string',
            'kategori'  => 'required|string',
            'foto'      => 'nullable|image|mimes:jpeg,png,jpg|max:2048'
        ]);

        $barang = Barang::findOrFail($id);

        // Susun array data dasar yang akan diperbarui
        $dataUpdate = [
            'harga'     => $request->harga,
            'stok'      => $request->stok,
            'deskripsi' => $request->deskripsi,
            'kategori'  => $request->kategori,
        ];

        // Logika penggantian file gambar lama jika admin mengunggah berkas gambar baru
        if ($request->hasFile('foto')) {
            // Hapus file gambar lama dari penyimpanan lokal jika filenya eksis
            if ($barang->foto && file_exists(public_path('images/' . $barang->foto))) {
                @unlink(public_path('images/' . $barang->foto));
            }

            // Pindahkan berkas foto yang baru
            $namaFotoBaru = time() . '_update_' . $request->file('foto')->getClientOriginalName();
            $request->file('foto')->move(public_path('images'), $namaFotoBaru);
            $dataUpdate['foto'] = $namaFotoBaru;
        }

        // Eksekusi pembaruan ke baris record database
        $barang->update($dataUpdate);

        return redirect()->back()->with('success', 'Data produk ' . $barang->nama_barang . ' berhasil diperbarui!');
    }

    // Menghapus Item Produk dari Database beserta Berkas Gambarnya
    public function destroy($id)
    {
        $barang = Barang::findOrFail($id);

        // Hapus file gambar dari folder lokal sebelum record-nya dihapus
        if ($barang->foto && file_exists(public_path('images/' . $barang->foto))) {
            @unlink(public_path('images/' . $barang->foto));
        }

        $barang->delete();

        return redirect()->back()->with('success', 'Produk berhasil dihapus dari data master.');
    }
}
