File: /home/marketing.cfbon.ru/public_html/app/Http/Controllers/Loyalty/ScoresController.php
<?php
namespace App\Http\Controllers\Loyalty;
use App\Enums\ScopesAction;
use App\Http\Controllers\Controller;
use App\Http\Requests\Loyalty\ScoresRequest;
use App\Models\Guest;
use App\Services\IicoCardService;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\View\View;
class ScoresController extends Controller
{
    public function index() : View
    {
        $userData = session('userData');
        $operationData = session('operationData');
        return view('loyalty.scores.index', [
            'scopesActions' => collect(ScopesAction::cases())
                ->mapWithKeys(fn($action) => [$action->value => $action->label()]),
            'userData' => $userData,
            'operationData' => $operationData,
        ]);
    }
    public function makeTransaction(Request $request, IicoCardService $iicoCardService): RedirectResponse
    {
        $actions = $request->input('actions') . 'Bonus';
        try {
            $iicoCardService->connect();
            if (method_exists($iicoCardService, $actions)) $iicoCardService->$actions($request->input('card_id'), $request->input('scopes'), 'тестовое');
            return redirect()->route('loyalty.scores.index')->with('success', 'Транзакция успешно завершена');
        } catch (\Exception $e) {
            return redirect()->route('loyalty.scores.index')->with('error', $e->getMessage());
        }
    }
    public function verificationUser(ScoresRequest $request) : RedirectResponse
    {
        $user = Guest::where('phone', $request->input('phoneOrCard'))
            ->orWhere('card_number', $request->input('phoneOrCard'))
            ->first();
        if ($user) {
            return redirect()->route('loyalty.scores.showUserInformationForm')->with('userData', $user)->with('operationData', $request->validated());
        } else {
            return redirect()->route('loyalty.scores.index')->with('error', 'Пользователь не найден');
        }
    }
    public function showUserInformationForm() : RedirectResponse|View
    {
        $userData = session('userData');
        $operationData = session('operationData');
        if (!$userData || !$operationData) return redirect()->route('loyalty.scores.index')->with('error', 'Сессия истекла');
        $operationType = ScopesAction::tryFrom(($operationData['actions'] ?? ''))->label();
        if (!$operationType) return redirect()->route('loyalty.scores.index')->with('error', 'Не задан тип операции');
        return view('loyalty.scores.userDataInformation', [
            'userData' => $userData,
            'operationData' => $operationData,
            'operationType' => $operationType,
        ]);
    }
}