<?php

namespace App\Http\Middleware;

use App\Attributes\RequiresPlus;
use App\Facades\License;
use App\Http\Middleware\Concerns\ChecksControllerAttributes;
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Arr;
use ReflectionAttribute;
use Symfony\Component\HttpFoundation\Response;

class RestrictPlusFeatures
{
    use ChecksControllerAttributes;

    /**
     * @param Closure(Request): Response $next
     */
    public function handle(Request $request, Closure $next): Response
    {
        if (License::isCommunity()) {
            optional(
                Arr::get(self::getAttributeUsageFromRequest($request, RequiresPlus::class), 0),
                static fn (ReflectionAttribute $attribute) => abort($attribute->newInstance()->code)
            );
        }

        return $next($request);
    }
}