<?php

namespace App\Http\Controllers\StaffGudang;

use Illuminate\Support\Facades\DB;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Models\Produk;
use App\Models\BahanBaku;      // Menggunakan model yang benar
use App\Models\StokBahanBaku;  // Diasumsikan ini untuk menyimpan jumlah stok
use App\Models\LogStok;
use App\Models\Pengiriman;
use Carbon\Carbon;

class GudangController extends Controller
{
    public function dashboard()
    {
        // Menggunakan with('bahanbaku') untuk memuat relasi
        $bahanKritis = StokBahanBaku::with('bahanbaku')->where('stok', '<', 7)->get();
        $totalBahan = StokBahanBaku::sum('stok');

        return view('staffgudang.dashboard', compact('bahanKritis', 'totalBahan'));
    }

    public function indexBahanBaku()
    {
        // Memuat relasi bahanBaku untuk tabel Stok Saat Ini
        $stokBahanBaku = StokBahanBaku::with('bahanBaku')->get();
        
        // Memuat relasi bahanBaku yang baru kita buat di LogStok
        $logTransaksi = LogStok::with('bahanBaku')->latest()->get();

        return view('staffgudang.stokbahanbaku.index', compact('stokBahanBaku', 'logTransaksi'));
    }

    // Fungsi untuk menampilkan form update (menampilkan dropdown)
    public function create()
    {
        // Mengambil semua bahan baku dari tabel 'bahanbaku' yang statusnya 'AKTIF'
        // Asumsi: di tabel 'bahanbaku' ada kolom 'status'
        $semuaBahan = \App\Models\BahanBaku::where('status', 'AKTIF')->get();
        
        return view('staffgudang.stokbahanbaku.update', compact('semuaBahan'));
    }

    
    // Fungsi untuk memproses data dari form dropdown
    public function store_update(Request $request)
{
    // 1. Validasi input: pastikan semua kolom terisi
    $request->validate([
        'bahanbaku_id' => 'required|exists:bahanbaku,id',
        'jenis'        => 'required|in:masuk,keluar',
        'jumlah'       => 'required|integer|min:1',
        'keterangan'   => 'nullable|string'
    ]);

    // 2. Gunakan DB Transaction agar konsisten
    \DB::transaction(function () use ($request) {
        
        // Cari data stok berdasarkan bahanbaku_id
        // firstOrCreate akan membuat record baru jika belum ada
        $stok = \App\Models\StokBahanBaku::firstOrCreate(
            ['bahanbaku_id' => $request->bahanbaku_id],
            ['stok' => 0]
        );

        // Update stok
        if ($request->jenis == 'masuk') {
            $stok->stok += $request->jumlah;
        } else {
            $stok->stok -= $request->jumlah;
        }
        $stok->save();

        // Simpan log transaksi ke tabel log_stok
        \App\Models\LogStok::create([
            'stok_bahanbaku_id' => $stok->id, // Pakai ID dari tabel stok_bahanbaku
            'jenis'             => $request->jenis,
            'jumlah'            => $request->jumlah,
            'keterangan'        => $request->keterangan
        ]);
    });

    // 3. Redirect kembali ke index setelah berhasil
    return redirect()->route('staffgudang.stokbahanbaku.index')
                     ->with('success', 'Transaksi berhasil disimpan!');
}
}