<?php

namespace App\Http\Controllers\Kasir;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Models\Transaksi;
use App\Models\DetailTransaksi;
use App\Models\Produk;
use App\Models\Bahan;
use Carbon\Carbon;
use Illuminate\Support\Facades\DB;

class TransaksiController extends Controller
{
    public function index()
    {
        $transaksis = Transaksi::whereDate('created_at', Carbon::today())->get();
        $totalPendapatan = $transaksis->sum('total_harga');
        $totalTransaksi = $transaksis->count();
        $totalCup = $transaksis->sum('total_item');

        return view('kasir.transaksi', compact(
            'transaksis',
            'totalPendapatan',
            'totalTransaksi',
            'totalCup'
        ));
    }

    public function store(Request $request)
    {
        DB::beginTransaction();

        try {
            // Simpan transaksi utama
            $transaksi = Transaksi::create([
                'kode_transaksi'    => 'TRX-' . time(),
                'total_harga'       => $request->total,
                'metode_pembayaran' => $request->metode,
                'kasir_name'        => auth()->user()->name,
            ]);

            // Simpan detail tiap item
            // cart mengirim: { name, price, image, qty }
            foreach ($request->items as $item) {
                DetailTransaksi::create([
                    'transaksi_id' => $transaksi->id,
                    'nama_produk'  => $item['name'],
                    'qty'          => $item['qty'],
                    'harga_satuan' => $item['price'],
                ]);

                // Kurangi stok bahan berdasarkan resep produk
                $produk = Produk::where('nama_produk', $item['name'])->first();
                if ($produk) {
                    foreach ($produk->resep as $resep) {
                        $bahan = Bahan::where('nama_bahan', $resep->nama_bahan)->first();
                        if ($bahan) {
                            $jumlahDibutuhkan = $resep->jumlah * $item['qty'];

                            // Konversi satuan jika berbeda antara resep dan stok
                            $resepSatuan = strtolower(trim($resep->satuan));
                            $bahanSatuan = strtolower(trim($bahan->satuan));

                            if ($bahanSatuan === 'kg' && in_array($resepSatuan, ['gr', 'gram', 'g'])) {
                                $jumlahDibutuhkan = $jumlahDibutuhkan / 1000;
                            } elseif (in_array($bahanSatuan, ['liter', 'l']) && $resepSatuan === 'ml') {
                                $jumlahDibutuhkan = $jumlahDibutuhkan / 1000;
                            }

                            $bahan->stok -= $jumlahDibutuhkan;
                            $bahan->save();
                        }
                    }
                }
            }

            DB::commit();

            return response()->json(['success' => true]);
        } catch (\Exception $e) {
            DB::rollBack();
            return response()->json([
                'success' => false,
                'message' => 'Gagal: ' . $e->getMessage()
            ], 500);
        }
    }
}
