<?php

namespace Webkul\WebkulCsvImportBundle\Component;

use Liip\ImagineBundle\Binary\BinaryInterface;
use Liip\ImagineBundle\Imagine\Cache\CacheManager;
use Liip\ImagineBundle\Imagine\Cache\Helper\PathHelper;
use Liip\ImagineBundle\Imagine\Data\DataManager;
use Liip\ImagineBundle\Service\FilterPathContainer;

class MediaFileGenerator
{
    public function __construct(
        protected CacheManager $cacheManager,
        protected DataManager $dataManager
    ) {}

    /**
     * get media file url by binary
     */
    public function getMediaFileUrlByBinary($request, $path, $filter)
    {
        $path = PathHelper::urlPathToFilePath($path);
        $resolver = $request->get('resolver');
        $basePathContainer = new FilterPathContainer($path);
        $filterPathContainers = [$basePathContainer];

        foreach ($filterPathContainers as $filterPathContainer) {
            if (!$this->cacheManager->isStored($filterPathContainer->getTarget(), $filter, $resolver)) {
                $this->cacheManager->store(
                    $this->createResourceBinary($filterPathContainer, $filter),
                    $filterPathContainer->getTarget(),
                    $filter,
                    $resolver
                );
            }
        }

        return $this->cacheManager->resolve($basePathContainer->getTarget(), $filter, $resolver);
    }

    /**
     * create binary of file
     */
    private function createResourceBinary(FilterPathContainer $filterPathContainer, string $filter): BinaryInterface
    {
        return $this->dataManager->find($filter, $filterPathContainer->getSource());
    }
}
