<?php 
 
namespace CoreBundle\Services; 
 
use Sonata\MediaBundle\Model\MediaInterface; 
use Sonata\MediaBundle\Provider\Pool; 
use Sonata\MediaBundle\Twig\MediaRuntime; 
use Twig\Extension\AbstractExtension; 
use Twig\TwigFunction; 
 
class MediaExtensionVidi extends AbstractExtension 
{ 
    private Pool $pool; 
 
    public function __construct(Pool $pool) 
    { 
        $this->pool = $pool; 
    } 
 
    public function getFunctions(): array 
    { 
        return [ 
            new TwigFunction('sonata_media', [MediaRuntime::class, 'media'], ['is_safe' => ['html']]), 
            new TwigFunction('sonata_thumbnail', [MediaRuntime::class, 'thumbnail'], ['is_safe' => ['html']]), 
            new TwigFunction('sonata_path', [MediaRuntime::class, 'path']), 
            new TwigFunction('path_webp', [$this, 'pathWebp']), 
        ]; 
    } 
 
    public function pathWebp(?MediaInterface $media, string $format): string 
    { 
        if (!$media) { 
            return ''; 
        } 
 
        /** @var ImageProviderVidi $provider */ 
        $provider = $this->pool->getProvider($media->getProviderName()); 
 
        return $provider->generatePublicUrlWebp( 
            $media, 
            $provider->getFormatName($media, $format) 
        ); 
    } 
 
    public function getPath(?MediaInterface $media, string $format): string 
    { 
        if (!$media) { 
            return ''; 
        } 
 
        /** @var ImageProviderVidi $provider */ 
        $provider = $this->pool->getProvider($media->getProviderName()); 
 
        return $provider->generatePublicUrl( 
            $media, 
            $provider->getFormatName($media, $format) 
        ); 
    } 
}