<?php

namespace Illuminate\Queue\Middleware;

use Closure;

class Skip
{
    /**
     * @param  bool  $skip  Whether the job should be skipped.
     */
    public function __construct(protected bool $skip = false)
    {
    }

    /**
     * Apply the middleware if the given condition is truthy.
     *
     * @param  bool|(\Closure(): bool)  $condition
     */
    public static function when(Closure|bool $condition): static
    {
        return new static(value($condition));
    }

    /**
     * Apply the middleware unless the given condition is truthy.
     *
     * @param  bool|(\Closure(): bool)  $condition
     */
    public static function unless(Closure|bool $condition): static
    {
        return new static(! value($condition));
    }

    /**
     * Handle the job.
     */
    public function handle(mixed $job, callable $next): mixed
    {
        if ($this->skip) {
            return false;
        }

        return $next($job);
    }
}
