<?php

namespace Laravel\Nova\Fields;

trait HasThumbnail
{
    /**
     * The callback used to retrieve the thumbnail URL.
     *
     * @var (callable(mixed, string, mixed):?string)|null
     */
    public $thumbnailUrlCallback;

    /**
     * Specify the callback that should be used to retrieve the thumbnail URL.
     *
     * @param  callable(mixed, string, mixed):?string  $thumbnailUrlCallback
     * @return $this
     */
    public function thumbnail(callable $thumbnailUrlCallback)
    {
        $this->thumbnailUrlCallback = $thumbnailUrlCallback;

        return $this;
    }

    /**
     * Resolve the thumbnail URL for the field.
     *
     * @return string|null
     */
    public function resolveThumbnailUrl()
    {
        return \is_callable($this->thumbnailUrlCallback)
            ? \call_user_func($this->thumbnailUrlCallback, $this->value, $this->getStorageDisk(), $this->resource)
            : null;
    }
}
