<?xml version="1.0" ?>

<container xmlns="http://symfony.com/schema/dic/services"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">

    <services>
        <defaults public="true" />

        <service id="shopware_media.service_subscriber" class="Shopware\Bundle\MediaBundle\Subscriber\ServiceSubscriber">
            <argument type="service" id="service_container" />

            <tag name="shopware.event_subscriber" />
        </service>

        <service id="shopware_media.media_migration" class="Shopware\Bundle\MediaBundle\MediaMigration" />

        <service id="shopware_media.garbage_collector_factory" class="Shopware\Bundle\MediaBundle\GarbageCollectorFactory">
            <argument type="service" id="Shopware\Components\ContainerAwareEventManager"/>
            <argument type="service" id="Doctrine\DBAL\Connection" />
            <argument type="service" id="Shopware\Bundle\MediaBundle\MediaServiceInterface" />
        </service>

        <service id="shopware_media.garbage_collector" class="Shopware\Bundle\MediaBundle\GarbageCollector">
            <factory service="Shopware\Bundle\MediaBundle\GarbageCollectorFactory" method="factory" />
        </service>

        <service id="shopware_media.media_service" class="Shopware\Bundle\MediaBundle\MediaService">
            <factory service="Shopware\Bundle\MediaBundle\MediaServiceFactory" method="factory" />
            <argument>%shopware.cdn.backend%</argument>
        </service>

        <service id="shopware_media.replace_service" class="Shopware\Bundle\MediaBundle\MediaReplaceService">
            <argument type="service" id="Shopware\Bundle\MediaBundle\MediaServiceInterface" />
            <argument type="service" id="Shopware\Components\Thumbnail\Manager"/>
            <argument type="service" id="Shopware\Components\Model\ModelManager" />
            <argument type="service" id="Shopware\Bundle\MediaBundle\MediaExtensionMappingServiceInterface" />
        </service>

        <service id="shopware_media.media_service_factory" class="Shopware\Bundle\MediaBundle\MediaServiceFactory">
            <argument type="service" id="service_container" />
            <argument type="tagged" tag="shopware_media.adapter"/>
            <argument>%shopware.cdn%</argument>
        </service>

        <service id="shopware_media.strategy_factory" class="Shopware\Bundle\MediaBundle\Strategy\StrategyFactory">
            <argument>%shopware.cdn%</argument>
        </service>

        <service id="shopware_media.strategy" class="Shopware\Bundle\MediaBundle\Strategy\StrategyInterface">
            <factory service="Shopware\Bundle\MediaBundle\Strategy\StrategyFactory" method="factory" />
            <argument>%shopware.cdn.strategy%</argument>
        </service>

        <service id="shopware_media.extension_mapping" class="Shopware\Bundle\MediaBundle\MediaExtensionMappingService">
            <argument>%shopware.media.whitelist%</argument>
        </service>

        <!-- Optimizer -->
        <service id="shopware_media.cdn_optimizer_service" class="Shopware\Bundle\MediaBundle\CdnOptimizerService">
            <argument type="service" id="Shopware\Bundle\MediaBundle\OptimizerService"/>
            <argument type="service" id="Shopware\Bundle\MediaBundle\MediaServiceInterface"/>
        </service>

        <service id="shopware_media.optimizer_service" class="Shopware\Bundle\MediaBundle\OptimizerService">
            <argument type="tagged" tag="shopware_media.optimizer"/>
        </service>

        <service id="shopware_media.cache_optimizer_service" class="Shopware\Bundle\MediaBundle\CacheOptimizerService"
                 decorates="Shopware\Bundle\MediaBundle\OptimizerService" public="false">
            <argument type="service" id="shopware_media.cache_optimizer_service.inner" />
        </service>

        <service id="shopware_media.optimizer.jpegoptim" class="Shopware\Bundle\MediaBundle\Optimizer\JpegoptimOptimizer">
            <tag name="shopware_media.optimizer" priority="100" />
        </service>

        <service id="shopware_media.optimizer.jpegtran" class="Shopware\Bundle\MediaBundle\Optimizer\JpegtranOptimizer">
            <tag name="shopware_media.optimizer" priority="90" />
        </service>

        <service id="shopware_media.optimizer.pngout" class="Shopware\Bundle\MediaBundle\Optimizer\PngoutOptimizer">
            <tag name="shopware_media.optimizer" priority="100" />
        </service>

        <service id="shopware_media.optimizer.optipng" class="Shopware\Bundle\MediaBundle\Optimizer\OptipngOptimizer">
            <tag name="shopware_media.optimizer" priority="90" />
        </service>

        <service id="shopware_media.optimizer.pngcrush" class="Shopware\Bundle\MediaBundle\Optimizer\PngcrushOptimizer">
            <tag name="shopware_media.optimizer" priority="80" />
        </service>

        <service id="shopware_media.optimizer.guetzli" class="Shopware\Bundle\MediaBundle\Optimizer\GuetzliOptimizer">
            <tag name="shopware_media.optimizer" priority="50" />
        </service>

        <!-- Media Adapters -->
        <service id="shopware_media.adapter.local" class="Shopware\Bundle\MediaBundle\Adapters\LocalAdapterFactory">
            <tag name="shopware_media.adapter" />
        </service>

        <service id="shopware_media.adapter.ftp" class="Shopware\Bundle\MediaBundle\Adapters\FtpAdapterFactory">
            <tag name="shopware_media.adapter" />
        </service>

        <service id="shopware_media.adapter.s3" class="Shopware\Bundle\MediaBundle\Adapters\AwsS3v3Factory">
            <tag name="shopware_media.adapter" />
        </service>

        <service id="shopware_media.adapter.gcp" class="Shopware\Bundle\MediaBundle\Adapters\GoogleStorageFactory">
            <tag name="shopware_media.adapter" />
        </service>

        <!-- Commands -->

        <service id="shopware_media.commands.media_cleanup" class="Shopware\Bundle\MediaBundle\Commands\MediaCleanupCommand">
            <tag name="console.command" command="sw:media:cleanup"/>
        </service>

        <service id="shopware_media.commands.image_migrate" class="Shopware\Bundle\MediaBundle\Commands\ImageMigrateCommand">
            <tag name="console.command" command="sw:media:migrate"/>
        </service>

        <service id="shopware_media.commands.media_optimize" class="Shopware\Bundle\MediaBundle\Commands\MediaOptimizeCommand">
            <tag name="console.command" command="sw:media:optimize"/>
        </service>
    </services>
</container>
