<?php

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;
use App\Models\DetailMakanan;
use App\Models\Kriteria;
use App\Models\KriteriaMakanan;
use App\Models\Makanan;
use Illuminate\Http\Request;

class MakananController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        //menampilkan data makanan
        $makanan = Makanan::all();
        return view('pages.makanan.index', compact('makanan'));
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        //menampilkan halaman create makanan
        return view('pages.makanan.create');
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        //validasi data makanan
        $request->validate([
            'kode' => 'required',
            'alternatif' => 'required',
            'karbohidrat' => 'required',
            'lemak' => 'required',
            'protein' => 'required',
            'serat' => 'required',
            'karbohidrat_ket' => 'required',
            'lemak_ket' => 'required',
            'protein_ket' => 'required',
            'serat_ket' => 'required',
        ], [
            'kode.required' => 'Kode harus diisi.',
            'alternatif.required' => 'Alternatif harus diisi.',
            'karbohidrat.required' => 'Karbohidrat harus diisi.',
            'lemak.required' => 'Lemak harus diisi.',
            'protein.required' => 'protein harus diisi.',
            'serat.required' => 'Serat harus diisi.',
            'karbohidrat_ket.required' => 'Keterangan harus diisi.',
            'lemak_ket.required' => 'Keterangan harus diisi.',
            'protein_ket.required' => 'Keterangan harus diisi.',
            'serat_ket.required' => 'Keterangan harus diisi.',
        ]);
        //simpan karbohidrat, lemak, protein dan serat
        $makanan = new Makanan;
        $makanan->kode = $request->kode;
        $makanan->alternatif = $request->alternatif;
        $makanan->kalori = 0;
        $makanan->save();
        $karbohidrat = Kriteria::where('nama', 'karbohidrat')->first();
        $lemak = Kriteria::where('nama', 'lemak')->first();
        $protein = Kriteria::where('nama', 'protein')->first();
        $serat = Kriteria::where('nama', 'serat')->first();
        $kriteria = new KriteriaMakanan;
        $kriteria->kriteria_id = $karbohidrat->id;
        $kriteria->makanan_id = $makanan->id;
        $kriteria->nilai = $request->karbohidrat;
        $kriteria->keterangan = $request->karbohidrat_ket;
        $kriteria->save();
        $kriteria = new KriteriaMakanan;
        $kriteria->kriteria_id = $lemak->id;
        $kriteria->makanan_id = $makanan->id;
        $kriteria->nilai = $request->lemak;
        $kriteria->keterangan = $request->lemak_ket;
        $kriteria->save();
        $kriteria = new KriteriaMakanan;
        $kriteria->kriteria_id = $protein->id;
        $kriteria->makanan_id = $makanan->id;
        $kriteria->nilai = $request->protein;
        $kriteria->keterangan = $request->protein_ket;
        $kriteria->save();
        $kriteria = new KriteriaMakanan;
        $kriteria->kriteria_id = $serat->id;
        $kriteria->makanan_id = $makanan->id;
        $kriteria->nilai = $request->serat;
        $kriteria->keterangan = $request->serat_ket;
        $kriteria->save();
        //redirect ke halaman makanan
        return redirect()->route('makanan.index')->with('success', 'Makanan berhasil ditambahkan.');
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        //menampilkan halaman detail alternatif makanan
        $detailMakanan = DetailMakanan::where('makanan_id', $id)->get();
        $makanan = Makanan::findOrFail($id);
        $count = DetailMakanan::where('makanan_id', $id)->pluck('kalori')->sum();
        return view('pages.makanan.detail', compact('makanan', 'detailMakanan', 'count'));
    }

    public function storeDetailMakanan($idMakanan, Request $request)
    {
        $id = Makanan::find($idMakanan);
        //validasi detail alternatif makanan
        $validate = $request->validate([
            'makanan_id' => 'required',
            'berat' => 'required|numeric',
            'waktu' => 'required',
            'kalori' => 'required|numeric',
            'nama_makanan' => 'required',
        ], [
            'berat.required' => 'Kolom berat wajib diisi.',
            'kalori.required' => 'Kolom kalori wajib diisi.',
            'kalori.numeric' => 'Kolom kalori berupa angkat.',
            'nama_makanan.required' => 'Kolom makanan wajib diisi.',
        ]);
        $id->kalori += $request->kalori;
        $id->save();
        DetailMakanan::create($validate);
        return redirect()->route('makanan.show', $id)->with('success', 'Detail makanan berhasil ditambahkan.');
    }

    public function UpdateDetailMakanan($id, $idMakanan, Request $request)
    {
        $idmakan = Makanan::find($idMakanan);
        //validasi update data makanan
        $validate = $request->validate([
            'makanan_id' => 'required',
            'berat' => 'required|numeric',
            'waktu' => 'required',
            'kalori' => 'required|numeric',
            'nama_makanan' => 'required',
        ]
            , [
                'berat.required' => 'Kolom berat wajib diisi.',
                'kalori.required' => 'Kolom kalori wajib diisi.',
                'kalori.numeric' => 'Kolom kalori berupa angkat.',
                'nama_makanan.required' => 'Kolom makanan wajib diisi.',
            ]);
        $detailmakanan = DetailMakanan::find($id);
        if ($request->kalori <= $detailmakanan->kalori) {
            $hasil = $detailmakanan->kalori - $request->kalori;
            $idmakan->kalori -= $hasil;
        }
        if ($request->kalori > $detailmakanan->kalori) {
            $hasil = $request->kalori - $detailmakanan->kalori;
            $idmakan->kalori += $hasil;
        }
        $idmakan->save();
        $detailmakanan->update($validate);
        return redirect()->route('makanan.show', $idmakan)->with('success', 'Detail makanan berhasil edit.');
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        //menampilkan halaman edi alternatid makanan
        $makanan = Makanan::findOrFail($id);
        $karbohidrat1 = Kriteria::where('nama', 'karbohidrat')->first();
        $lemak1 = Kriteria::where('nama', 'lemak')->first();
        $protein1 = Kriteria::where('nama', 'protein')->first();
        $serat1 = Kriteria::where('nama', 'serat')->first();
        $karbohidrat = KriteriaMakanan::where('makanan_id', $id)->where('kriteria_id', $karbohidrat1->id)->first();
        $lemak = KriteriaMakanan::where('makanan_id', $id)->where('kriteria_id', $lemak1->id)->first();
        $protein = KriteriaMakanan::where('makanan_id', $id)->where('kriteria_id', $protein1->id)->first();
        $serat = KriteriaMakanan::where('makanan_id', $id)->where('kriteria_id', $serat1->id)->first();
        return view('pages.makanan.edit', compact('makanan', 'karbohidrat', 'lemak', 'protein', 'serat'));
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        //validasi update alternatif makanan
        $request->validate([
            'kode' => 'required',
            'alternatif' => 'required',
            'karbohidrat' => 'required',
            'lemak' => 'required',
            'protein' => 'required',
            'serat' => 'required',
        ], [
            'kode.required' => 'Kode harus diisi.',
            'alternatif.required' => 'Alternatif harus diisi.',
            'karbohidrat.required' => 'Karbohidrat harus diisi.',
            'lemak.required' => 'Lemak harus diisi.',
            'protein.required' => 'Protein harus diisi.',
            'serat.required' => 'Serat harus diisi.',
        ]);
        //simpan data
        $makanan = Makanan::findOrFail($id);
        $makanan->kode = $request->kode;
        $makanan->alternatif = $request->alternatif;
        $makanan->save();
        $karbohidrat = Kriteria::where('nama', 'karbohidrat')->first();
        $lemak = Kriteria::where('nama', 'lemak')->first();
        $protein = Kriteria::where('nama', 'protein')->first();
        $serat = Kriteria::where('nama', 'serat')->first();
        $kriteria = KriteriaMakanan::where('makanan_id', $id)->where('kriteria_id', $karbohidrat->id)->first();
        $kriteria->nilai = $request->karbohidrat;
        $kriteria->keterangan = $request->karbohidrat_ket;
        $kriteria->save();
        $kriteria = KriteriaMakanan::where('makanan_id', $id)->where('kriteria_id', $lemak->id)->first();
        $kriteria->nilai = $request->lemak;
        $kriteria->keterangan = $request->lemak_ket;
        $kriteria->save();
        $kriteria = KriteriaMakanan::where('makanan_id', $id)->where('kriteria_id', $protein->id)->first();
        $kriteria->nilai = $request->protein;
        $kriteria->keterangan = $request->protein_ket;
        $kriteria->save();
        $kriteria = KriteriaMakanan::where('makanan_id', $id)->where('kriteria_id', $serat->id)->first();
        $kriteria->nilai = $request->serat;
        $kriteria->keterangan = $request->serat_ket;
        $kriteria->save();
        return redirect()->route('makanan.index')->with('success', 'Makanan berhasil diedit.');
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        //hapus alternatif makanan
        $detail_makanan = DetailMakanan::where('makanan_id', $id)->delete();
        $kriteria_makanan = KriteriaMakanan::where('makanan_id', $id)->delete();
        $makanan = Makanan::find($id)->delete();
        return redirect()->route('makanan.index')->with('success', 'Makanan berhasil dihapus.');
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroyDetailMakanan($id, $idMakanan)
    {
        //hapus detail alternatif makanan
        $idmakan = Makanan::find($idMakanan);
        $idmakan->kalori -= DetailMakanan::find($id)->kalori;
        $idmakan->save();
        DetailMakanan::find($id)->delete();
        return redirect()->route('makanan.show', $idmakan)->with('success', 'Detail makanan berhasil dihapus');
    }
}
