<?php

namespace App\Http\Controllers;

use App\Http\Requests\ItemsExchangeOfferRequest;
use App\Models\Item;
use App\Models\Offer;
use App\User;
use Illuminate\Http\Request;

class ItemsExchangeOfferController extends Controller
{

    public function store(ItemsExchangeOfferRequest $request, Item $item = null)
    {
        // вообще Item как объект не нужен, достаточно только Id
        // но для проверки на совпадение user_id нужно
        // проверку запроса лучше сформировать самому ???

        if ($this->offerExist($request)) {
            Offer::create($request->except('_token'));
            $userTo = Item::with('user')->where('id', $request->item_id)->first()->user;
            $this->mailOfferRequest($userTo);

            // нужно изменить редирект на список заключенных обменов
            return redirect()->back()->with(['status.text' => 'Предложение отправлено!', 'status.class' => 'success']);
        };

        return redirect()->back()->with(['status.text' => 'Вы уже предлогали такой обмен!', 'status.class' => 'warning']);
    }

    protected function offerExist(Request $request): bool
    {
        $data = $request->except('_token');
        $exist = Offer::where('item_id', $data['item_id'])
            ->where('item_offer_id', $data['item_offer_id'])
            ->first();
        return empty($exist);
    }

    protected function mailOfferRequest(User $user)
    {
        mail($user->email, 'Запрос на обмен', 'Вам был отправлен запрос на обмен. Проверте свой аккаунт.');

        // Не работает из-за упразднения метода отправки в ларавель 5,6

//        $userTo = $user->toArray();
//        Mail::send(new OfferRequestMail($user));
//        Mail::raw('Sending emails with Mailgun and Laravel is easy!', function ($message) {
//            $message->to('johndoe@gmail.com');
//        });
    }
}
