/home/bdqbpbxa/dev-subdomains/api-uniferx.goodface.com.ua/vendor/laravel/nova/src/WithBadge.php
<?php

namespace Laravel\Nova;

trait WithBadge
{
    /**
     * The badge content for the menu item.
     *
     * @var (\Closure():(\Laravel\Nova\Badge|string))|(callable():(\Laravel\Nova\Badge|string))|\Laravel\Nova\Badge|string|null
     */
    public $badgeCallback;

    /**
     * The condition for showing the badge inside the menu item.
     *
     * @var (\Closure():bool)|bool
     */
    public $badgeCondition = true;

    /**
     * The type of badge that should represent the item.
     *
     * @var string
     */
    public $badgeType = 'info';

    /**
     * Set the content to be used for the item's badge.
     *
     * @param  (\Closure():(\Laravel\Nova\Badge|string))|(callable():(\Laravel\Nova\Badge|string))|\Laravel\Nova\Badge|string  $badgeCallback
     * @param  string|null  $type
     * @return $this
     */
    public function withBadge($badgeCallback, $type = 'info')
    {
        $this->badgeType = $type;

        if (is_callable($badgeCallback) || $badgeCallback instanceof Badge) {
            $this->badgeCallback = $badgeCallback;
        }

        if (is_string($badgeCallback)) {
            $this->badgeCallback = function () use ($badgeCallback, $type) {
                return Badge::make($badgeCallback, $type);
            };
        }

        return $this;
    }

    /**
     * Set the content to be used for the item's badge if the condition matches.
     *
     * @param  (\Closure():(\Laravel\Nova\Badge|string))|(callable():(\Laravel\Nova\Badge|string))|\Laravel\Nova\Badge|string  $badgeCallback
     * @param  string|null  $type
     * @param  (\Closure():(bool))|bool  $condition
     * @return $this
     */
    public function withBadgeIf($badgeCallback, $type, $condition)
    {
        $this->badgeCondition = $condition;

        $this->withBadge($badgeCallback, $type);

        return $this;
    }

    /**
     * Resolve the badge for the item.
     *
     * @return \Laravel\Nova\Badge|null
     */
    public function resolveBadge()
    {
        if (value($this->badgeCondition)) {
            if (is_callable($this->badgeCallback)) {
                /** @var \Laravel\Nova\Badge|string|null $result */
                $result = call_user_func($this->badgeCallback);

                if (is_null($result)) {
                    throw new \Exception('A menu item badge must always have a value.');
                }

                if (! $result instanceof Badge) {
                    return Badge::make($result, $this->badgeType);
                }

                return $result;
            }

            return $this->badgeCallback;
        }
    }
}