<?php

namespace App\Http\Controllers\Kasir;

use App\Http\Controllers\Controller;
use App\Models\DetailPesanan;
use App\Models\KelompokKategori;
use App\Models\Produk;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;

class Transaksi extends Controller
{

    public function index()
    {
        $orderCode =  "ORD -" . strtoupper(random_str(6, random_str()));
        $KelompokKategori = KelompokKategori::with('kelompokKategoriPivot.produk')->get();

        foreach ($KelompokKategori as $item) {
            foreach ($item->kelompokKategoriPivot as $kelompokKategoriPivot) {    
                // Query tambahan untuk mendapatkan total pembelian berdasarkan produk
                $totalPembelianByProduk[$kelompokKategoriPivot->produk->id] = DetailPesanan::
                    select('detail_pesanans.produk_id', DB::raw('SUM(detail_pesanans.jumlah_produk) as total_beli'))
                    ->where('detail_pesanans.produk_id', '=', $kelompokKategoriPivot->produk->id)
                    ->groupBy('detail_pesanans.produk_id')
                    ->first();
            }
        }
        $produk = Produk::all();
        return view('pages.Kasir.transaksi', compact('orderCode', 'KelompokKategori', 'produk', 'totalPembelianByProduk'));
    }

    public function store(Request $request)
    {
        $request->validate([
            'orderCode' => 'required',
            'namaPemesan' => 'required',
            'nomorMeja' => 'required',
            'orderMenus' => 'required',
        ], [
            'orderCode.required' => 'Kode pesanan tidak boleh kosong',
            'namaPemesan.required' => 'Nama pemesan tidak boleh kosong',
            'nomorMeja.required' => 'Nomor meja tidak boleh kosong',
            'orderMenus.required' => 'Pesanan tidak boleh kosong',
        ]);

        try {
            DB::beginTransaction();

            $orderMenusQty = 0;
            $orderMenusRupiah = 0;
            foreach ($request->orderMenus as $key => $value) {
                $orderMenusQty += $value['qty'];
                $orderMenusRupiah += $value['total'];
            }
            $pesananDatas = [
                'kode_pesanan' => $request->orderCode,
                'nama_pemesan' => $request->namaPemesan,
                'nomor_meja' => $request->nomorMeja,
                'status_pesanan' => '1',
                'tanggal_pesanan' => date('Y-m-d H:i:s'),
                'keterangan_pesanan' => $request->keteranganPesanan ?? null,
                'total_pesanan' => $orderMenusQty,
                'total_bayar' => $orderMenusRupiah,
                'grand_total' => $request->totalDiskon,
                'nominal_bayar' => $request->nominalBayar,
                'diskon_persen' => $request->diskon,
                'nominal_kembali' => $request->kembali,
                'status_bayar' => '1',
                'user_id' => '1',
            ];

            $pesananModels = \App\Models\Pesanan::create($pesananDatas);

            foreach ($request->orderMenus as $key => $value) {
                $oderDatas = [
                    'pesanan_id' => $pesananModels->id,
                    'produk_id' => $value['id'],
                    'nama_produk' => $value['nama'],
                    'jumlah_produk' => $value['qty'],
                    'harga_produk' => $value['harga'],
                    'total_harga_produk' => $value['total'],
                ];
                $detailPesananModels = \App\Models\DetailPesanan::create($oderDatas);
            }

            DB::commit();
            // return url link page print
            return ['url' => route('transaksi.print', $pesananModels->id)  . '?print=true', 'message' => 'Pesanan berhasil ditambahkan'];
        } catch (\Throwable $th) {
            DB::rollBack();
            dd($th->getMessage());
            return redirect()->back()->with('error', 'Terjadi kesalahan');
        }

        return redirect()->back()->with('success', 'Pesanan berhasil ditambahkan');
    }

    public function print($id)
    {
        $pesanan = \App\Models\Pesanan::with('detailPesanan', 'user')->find($id);
        return view('pages.Kasir.print', compact('pesanan'));
    }

    public function detail($id)
    {
        $pesanan = \App\Models\Pesanan::with('detailPesanan', 'user')->find($id);
        return view('pages.Kasir.detail', compact('pesanan'));
    }

    public function selectPaket(Request $request)
    {
        $arrayKodeProduk = $request->kodeProduk;
        // tampung data kodeProduk dari request ke variabel $kodeProduk
        $kodeProduk = [];

        usort($arrayKodeProduk, function ($a, $b) {
            return $a['urutan'] - $b['urutan'];
        });

        foreach ($arrayKodeProduk as $key => $value) {
            $kodeProduk[] = $value['kode_produk'];
        }
        $hasil = [];
        $hasil[] = implode(' ', $kodeProduk);

        // cari data produk berdasarkan kodeProduk
        $produk = Produk::where('kode_produk', $hasil)->first();
        // dd($produk);
        return response()->json($produk);
    }
}
