<?php

namespace App\Http\Controllers;

use App\Menu;
use App\NazvosloviVelicin;
use Exception;
use Illuminate\Contracts\View\Factory;
use Illuminate\Http\RedirectResponse;
use Illuminate\Support\Facades\Validator;
use Illuminate\Http\Request;
use Illuminate\View\View;


class VelicinyController extends Controller
{

    public const DEFAULT = [1,2,3,4,5];

    public function index()
    {
        return view('NastaveniVelicin.veliciny',['menu' => Menu::getData()]);
    }

    /**
     * @param NazvosloviVelicin $nazvosloviVelicin
     * @return Factory|View
     */
    public function edit(NazvosloviVelicin $nazvosloviVelicin)
    {
        return view('NastaveniVelicin.velicinyEdit', ['define' => $nazvosloviVelicin,'menu' => Menu::getData() ]);
    }

    /**
     * @param Request $request
     * @param NazvosloviVelicin $nazvosloviVelicin
     * @return RedirectResponse
     */
    public function update(Request $request, NazvosloviVelicin $nazvosloviVelicin): RedirectResponse
    {
        $request->except('_token');
        $nazvosloviVelicin->update($request->all());
        return redirect()->route('velicina-edit',$nazvosloviVelicin->idnazvoslovi_veliciny)->with('message', 'Veličina upravena');
    }

    public function showAddForm()
    {
        return view('NastaveniVelicin.velicinyAdd',['menu' => Menu::getData() ]);
    }

    public function addVelicina(Request $request): RedirectResponse
    {
        $data = $this->validatorNazvu($request);
        if ($data->fails())
        {
            return redirect()->back()->with('message', 'Pole Název nebylo vyplněno');
        }

        NazvosloviVelicin::create([
            'nazev' => $request->get('nazev'),
            'jednotka' => $request->get('jednotka'),
            'poznamka' => $request->get('poznamka'),
        ])->save();

        return redirect()->route('velicina-index')->with('message','Veličina přidána');
    }

    public function delete(NazvosloviVelicin $nazvosloviVelicin)
    {
        if(!in_array($nazvosloviVelicin->idnazvoslovi_veliciny,self::DEFAULT))
        {
            try
            {
                $nazvosloviVelicin->delete();
            }
            catch (Exception $e)
            {
                return redirect()->route('velicina-index')->with('message','Vyskytla se chyba'.$e);
            }
            return redirect()->route('velicina-index')->with('message','Veličina smazána');
        }

        return redirect()->route('velicina-index')->with('message','Tato veličina nelze smazat');

    }

    protected function validatorNazvu(Request $data)
    {
        return Validator::make($data->all(), [
            'nazev' => ['string'],
        ]);
    }
}
