<?php 

namespace Webkul\WooCommerceBundle\Controller;


use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;



class ImageFileController
{
    
     /**
     * @param FilesystemProvider            $filesystemProvider
     * @param FileInfoRepositoryInterface   $fileInfoRepository
     * @param array                         $filesystemAliases
     */
    public function __construct(
        \FilesystemProvider $filesystemProvider,
        \FileInfoRepositoryInterface $fileInfoRepository,
        array $filesystemAliases
    ) {
        $this->filesystemProvider = $filesystemProvider;
        $this->fileInfoRepository = $fileInfoRepository;
        $this->filesystemAliases = $filesystemAliases;
    }

    /**
     * @param string $fileName
     * 
     * @throws NotFoundHttpException
     * 
     * @return StreamedFileResponse
     */
    public function downloadAction($filename) 
    {
        $filename = urldecode($filename);
        
        foreach ($this->filesystemAliases as $alias) {
            $fs = $this->filesystemProvider->getFilesystem($alias);
            if ($fs->has($filename)) {
                $stream = $fs->readStream($filename);
                $headers = [];
              
                if (null !== $fileInfo = $this->fileInfoRepository->findOneByIdentifier($filename)) {
                    $headers['Content-Type'] = sprintf('%s', $fileInfo->getMimeType() );
                    $headers['Content-Length'] = sprintf('%s', $fileInfo->getSize() );
                    $headers['Accept-Ranges'] = 'bytes';
                }

                return new \StreamedFileResponse($stream, 200, $headers);
            }
        }

        throw new NotFoundHttpException(
            sprintf('File with key "%s" could not be found.', $filename)
        );
    }
}
