<?php

namespace App\Http\Controllers;

use App\Http\Requests\StoreItemRequest;
use App\Models\Category;
use App\Models\Item;
use App\Models\Picture;
use App\Models\Subcategory;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Input;

class ItemController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        return view('items.index');
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        $categories = Category::all();
        $subcategories = Subcategory::all();

        return view('items.registration', [
            'categories' => $categories,
            'subcategories' => $subcategories,
        ]);
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request $request
     * @return \Illuminate\Http\Response
     */
    public function store(StoreItemRequest $request)
    {
        if ($request->isMethod('POST')) {
            $item = new Item($request->all());
            $item->pictures = !empty(Input::file());
            $item->save();

            Picture::fromRequest($item);

            return redirect()->back()->with(['message' => 'Новый объект создан']);
        }

//        $item = app(Item::class);
//        $item->fill($input);
//        $item->created_at = 'NOW()';
//        $item->save();
//        return redirect()->route('admin.items');
// ---------------- Сохранение через объект пользователя -------
//        $user = User::find($input["user_id"]);
//        $item = Item::create([
//            'user_id' => $input["user_id"],
//            'caption' => 'тестовый товар',
//            'category_id' => '1',
//            'subcategory_id' => '2',
//            'description' => 'какойто текст'
//        ]);
//        $user->items()->save($item);
//---------------- ---------------------------------------------
        return redirect()->back()->with(['message' => 'Объект не создан!']);
    }

    /**
     * Display the specified resource.
     *
     * @param  \App\Item $item
     * @return \Illuminate\Http\Response
     */
    public function show(Item $item)
    {
        $item->load('category');
        return view('items.info_page', ['item' => $item]);
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  \App\Item $item
     * @return \Illuminate\Http\Response
     */
    public function edit(Item $item)
    {
        //
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request $request
     * @param  \App\Item $item
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, Item $item)
    {
        $item = $item ?? Item::find(Input::get('id'));
        if (!is_object($item)) {
            abort(404);
        }

        // не учтено.. если не менять картинку при редактирование объекта то может быть пустой файл картинки

        $item->pictures = $item->getPictures(); // не хорошо, нужно переделать.. ($item->pictures)??---------
        if ($request->isMethod('PUT')) {
            $item->pictures = !empty(Input::file());
            dd($item);
            $item->update([$request->all()
            ]);

            $result = $this->validate($request, [
                "files.image_0" => 'image|max:5000',
                "files.image_1" => 'image|max:5000',
                "files.image_2" => 'image|max:5000',
            ]);

//            dd($result);
//            (new ItemPicturesController)->storeInputFiles(Input::file());

//            Picture::fromRequest($item);        // метод стоит переназвать!! --------------------------------
            return redirect()->back()->with(['message' => 'Информация обновлена']);
        }
        return redirect()->back()->with(['message' => 'Информация не обновлена']);

    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  \App\Item $item
     * @return \Illuminate\Http\Response
     */
    public function destroy(Item $item)
    {
        $user = Auth::user();
        if ($user->can('destroy', $item)) {
            $item->delete();
            return redirect()->back();
        }
        return redirect()->route('welcome');
    }

}
