<?php

namespace App\Http\Controllers;

use App\Models\Penjualan;
use App\Models\Produk;
use App\Models\Hasil;
use Illuminate\Http\Request;

class ProdukController extends Controller
{
    public function cetak()
    {
        $data['title'] = 'Laporan Data Produk';
        $data['rows'] = Produk::orderBy('kode_produk')->get();
        return view('produk.cetak', $data);
    }

    public function index(Request $request)
    {
        $data['q'] = $request->input('q');
        $data['title'] = 'Data Produk';
        $data['limit'] = 10;
        $data['rows'] = Produk::where('kode_produk', 'like', '%' . $data['q'] . '%')
            ->orwhere('nama_produk', 'like', '%' . $data['q'] . '%')
            ->orderBy('kode_produk')
            ->paginate($data['limit'])->withQueryString();
        return view('produk.index', $data);
    }

    public function create()
    {
        $data['title'] = 'Tambah Produk';
        return view('produk.create', $data);
    }

    public function store(Request $request)
    {
        $request->validate([
            'kode_produk' => 'required|unique:tb_produk',
            'nama_produk' => 'required',
        ], [
            'kode_produk.required' => 'Kode produk harus diisi',
            'kode_produk.unique' => 'Kode produk harus unik',
            'nama_produk.required' => 'Nama harus diisi',
        ]);
        $produk = new Produk($request->all());
        $produk->save();

        return redirect('produk')->with('message', 'Data berhasil ditambah!');
    }

    public function edit(Produk $produk)
    {
        $data['row'] = $produk;
        $data['title'] = 'Ubah Produk';
        return view('produk.edit', $data);
    }

    public function update(Request $request, Produk $produk)
    {
        $request->validate([
            'nama_produk' => 'required',
        ], [
            'nama_produk.required' => 'Nama harus diisi',
        ]);
        $produk->nama_produk = $request->nama_produk;
        $produk->save();
        return redirect('produk')->with('message', 'Data berhasil diubah!');
    }

    public function destroy(Produk $produk)
    {
    // Mengambil penjualan dengan kode produk yang sama
    $penjualans = Penjualan::where('kode_produk', $produk->kode_produk)->get();

    // Menghapus setiap entri penjualan yang berkaitan dengan produk yang akan dihapus
    foreach ($penjualans as $penjualan) {
        $penjualan->delete();
    }

    // Mengambil hasil dengan kode produk yang sama
    $hasils = Hasil::where('kode_produk', $produk->kode_produk)->get();

    // Menghapus setiap entri hasil yang berkaitan dengan produk yang akan dihapus
    foreach ($hasils as $hasil) {
        $hasil->delete();
    }

    // Menghapus produk itu sendiri
    $produk->delete();

    return redirect('produk')->with('message', 'Data berhasil dihapus!');
    }
}
