<?php

namespace App\Http\Controllers\Affiliate;

use App\Classes\Modules\Affiliate\ControllersLogic\UpdateAffiliateLogic;
use App\Http\Requests\UpdateAffiliateRequest;
use App\Models\Affiliate;
use Illuminate\Http\JsonResponse;

class UpdateAffiliateController
{
    /**
     * @param UpdateAffiliateRequest $request
     * @param int $id
     * @param UpdateAffiliateLogic $logic
     * @return JsonResponse
     * @throws \Illuminate\Auth\Access\AuthorizationException
     */
    public function update(UpdateAffiliateRequest $request, int $id, UpdateAffiliateLogic $logic): JsonResponse {
        $affiliate = Affiliate::findOrFail($id);
        $this->authorize('update', $affiliate);
        return $logic->execute($request, $id);
    }
    
    /**
     * Authorize a given action for the current user.
     *
     * @param  mixed  $ability
     * @param  mixed|array  $arguments
     * @return \Illuminate\Auth\Access\Response
     *
     * @throws \Illuminate\Auth\Access\AuthorizationException
     */
    public function authorize($ability, $arguments = [])
    {
        return app(\Illuminate\Contracts\Auth\Access\Gate::class)->authorize($ability, $arguments);
    }
}

