<?php

namespace App\Http\Controllers\Kasir;

use App\Http\Controllers\Controller;
use App\Models\KategoriProduk;
use App\Models\KelompokKategori;
use App\Models\KelompokKategoriPivot;
use App\Models\Produk;
use Carbon\Carbon;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;

class Menu extends Controller
{
    public function index()
    {
        $kategori_produks = KategoriProduk::get();
        $kelompok_kategoris = KelompokKategori::get();
        return view('pages.Menu.index', compact('kategori_produks', 'kelompok_kategoris'));
    }

    public function kelompokKategori($id)
    {
        $kelompok_kategoris = KelompokKategori::where('kategori_produk_id', $id)->get();

        if (empty($kelompok_kategoris[0])) {
            return response()->json(['message' => 'Data Kosong']);
        } else {
            return $kelompok_kategoris;
        }
    }

    public function getDataMenu(Request $request)
    {
        $kelompok_kategori_id = $request->kelompok_produk;

        if ($kelompok_kategori_id == null || $kelompok_kategori_id == 0) {
            $data = KelompokKategoriPivot::with(['kelompokKategori', 'produk'])->get();
        } else {
            $data = KelompokKategoriPivot::with(['kelompokKategori', 'produk'])
                ->where('kelompok_kategori_id', $kelompok_kategori_id)
                ->get();
        }

        $nomor = 1;

        return $datatables = datatables()
            ->of($data)
            ->addColumn('nomor', function ($data) use (&$nomor) {
                return $nomor++;
            })
            ->addColumn('kode_produk', function ($data) {
                return $data->produk->kode_produk;
            })
            ->addColumn('nama_produk', function ($data) {
                return $data->produk->nama_produk;
            })
            ->addColumn('harga_produk', function ($data) {
                return $data->produk->harga_produk;
            })
            ->addColumn('nama_kelompok_kategori', function ($data) {
                return $data->kelompokKategori->nama_kelompok_kategori;
            })
            ->addColumn('kategori_produk', function ($data) {
                return $data->produk->kategori_produk->nama_kategori_produk;
            })
            ->addColumn('ubah', function ($data) {
                return '<div class="btn-group">
                            <a href="javascript:void(0)" onclick="editMenu(\'' . $data->id . '\')">
                                <span class="btn btn-md btn-warning"><i class="fas fa-edit"></i> Edit</span>
                            </a>
                        </div>';
            })
            ->rawColumns(['nomor', 'ubah'])
            ->make(true);
    }

    // Tambah Menu
    public function store(Request $request)
    {
        // validation
        $rules = array(
            'kategori_produk'  => 'required',
            'kelompok_produk'  => 'required',
            'kode_produk'  => 'required',
            'nama_produk'  => 'required',
            'harga_produk'  => 'required',
            'tersedia'  => 'required',
        );
        if ($request->kelompok_produk == 9) {
            $rules = array(
                'promodatetime'  => 'required',
            );
        }
        $validator = Validator::make($request->all(), $rules);

        // check validation
        if ($validator->fails()) {
            // If validation fails, return with errors
            return response()->json(['errors' => $validator->errors()], 422);
        } else {

            if ($request->kelompok_produk == 9) {
                // date promo 02/27/2024 12:00 AM - 03/30/2024 11:00 PM
                $tanggal_array = explode(" - ", $request->promodatetime);
                $tanggal_awal_string = $tanggal_array[0];
                $tanggal_akhir_string = $tanggal_array[1];

                // Konversi string tanggal menjadi objek Carbon
                $tanggal_awal = Carbon::createFromFormat('m/d/Y h:i A', $tanggal_awal_string);
                $tanggal_akhir = Carbon::createFromFormat('m/d/Y h:i A', $tanggal_akhir_string);

                // Mendapatkan tanggal dan waktu awal serta akhir
                $tgl_start_promo = $tanggal_awal->toDateTimeString();
                $tgl_end_promo = $tanggal_akhir->toDateTimeString();
            }

            // create product
            $produk = Produk::create([
                'kategori_produk_id' => $request->kategori_produk,
                'kode_produk' => $request->kode_produk,
                'nama_produk' => $request->nama_produk,
                'harga_produk' => $request->harga_produk,
                'tersedia' => $request->tersedia,
                'deskripsi_produk' => $request->deskripsi_produk,
                'stok_promo' => $request->stok_promo,
                'tgl_start_promo' => $tgl_start_promo,
                'tgl_end_promo' => $tgl_end_promo,
                'created_at' => Carbon::now()
            ]);

            $pivot_produk = KelompokKategoriPivot::create([
                'kelompok_kategori_id' => $request->kelompok_produk,
                'produk_id' => $produk->id,
                'created_at' => Carbon::now()
            ]);

            // Return a success response
            return response()->json(['message' => 'Data created successfully']);
        }
    }

    public function show($id)
    {
        $data = KelompokKategoriPivot::with(['kelompokKategori', 'produk'])->findOrFail($id);
        return response()->json($data);
    }

    // Ubah Menu
    public function update(Request $request, $id)
    {

        // validation
        $rules = array(
            'kategori_produk'  => 'required',
            'kelompok_produk'  => 'required',
            'kode_produk'  => 'required',
            'nama_produk'  => 'required',
            'harga_produk'  => 'required',
            'tersedia'  => 'required',
        );
        if ($request->kelompok_produk == 9) {
            $rules = array(
                'promodatetime'  => 'required',
            );
        }
        $validator = Validator::make($request->all(), $rules);

        // check validation
        if ($validator->fails()) {
            // If validation fails, return with errors
            return response()->json(['errors' => $validator->errors()], 422);
        } else {

            if ($request->kelompok_produk == 9) {
                // date promo 02/27/2024 12:00 AM - 03/30/2024 11:00 PM
                $tanggal_array = explode(" - ", $request->promodatetime);
                $tanggal_awal_string = $tanggal_array[0];
                $tanggal_akhir_string = $tanggal_array[1];

                // Konversi string tanggal menjadi objek Carbon
                $tanggal_awal = Carbon::createFromFormat('m/d/Y h:i A', $tanggal_awal_string);
                $tanggal_akhir = Carbon::createFromFormat('m/d/Y h:i A', $tanggal_akhir_string);

                // Mendapatkan tanggal dan waktu awal serta akhir
                $tgl_start_promo = $tanggal_awal->toDateTimeString();
                $tgl_end_promo = $tanggal_akhir->toDateTimeString();
            }

            $pivot = KelompokKategoriPivot::findOrFail($id);
            $produk = Produk::find($pivot->produk_id);

            // update pivot produk
            $pivot->update([
                'kelompok_ketegori_id' => $request->kelompok_produk,
            ]);

            // update produk
            $produk->update([
                'kategori_produk_id' => $request->kategori_produk,
                'kode_produk' => $request->kode_produk,
                'nama_produk' => $request->nama_produk,
                'harga_produk' => $request->harga_produk,
                'tersedia' => $request->tersedia,
                'deskripsi_produk' => $request->deskripsi_produk,
                'stok_promo' => $request->stok_promo,
                'tgl_start_promo' => $tgl_start_promo,
                'tgl_end_promo' => $tgl_end_promo,
            ]);

            // Return a success response
            return response()->json(['message' => 'Data created successfully']);
        }
    }
}