<?xml version="1.0" encoding="utf-8" ?>
<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">

    <parameters>

        <!-- Configuration defaults -->

        <parameter key="imagine.web_root">%kernel.root_dir%/../web</parameter>
        <parameter key="imagine.source_root">%kernel.root_dir%/../web</parameter>
        <parameter key="imagine.cache_prefix">media/cache</parameter>
        <parameter key="imagine.filters" type="collection" />

        <!-- Utility classes -->

        <parameter key="imagine.filter.manager.class">Avalanche\Bundle\ImagineBundle\Imagine\Filter\FilterManager</parameter>
        <parameter key="imagine.cache.path.resolver.class">Avalanche\Bundle\ImagineBundle\Imagine\CachePathResolver</parameter>
        <parameter key="imagine.cache.manager.class">Avalanche\Bundle\ImagineBundle\Imagine\CacheManager</parameter>

        <!-- Controller class -->

        <parameter key="imagine.controller.class">Avalanche\Bundle\ImagineBundle\Controller\ImagineController</parameter>

        <!-- Route loader class -->

        <parameter key="imagine.routing.loader.class">Avalanche\Bundle\ImagineBundle\Routing\ImagineLoader</parameter>

        <!-- Templating classes -->

        <parameter key="imagine.twig.extension.class">Avalanche\Bundle\ImagineBundle\Templating\ImagineExtension</parameter>
        <parameter key="imagine.templating.helper.class">Avalanche\Bundle\ImagineBundle\Templating\Helper\ImagineHelper</parameter>

        <!-- ImagineInterface implementations -->

        <parameter key="imagine.gd.class">Imagine\Gd\Imagine</parameter>
        <parameter key="imagine.imagick.class">Imagine\Imagick\Imagine</parameter>
        <parameter key="imagine.gmagick.class">Imagine\Gmagick\Imagine</parameter>

        <!-- Filter loaders' classes -->

        <parameter key="imagine.filter.loader.thumbnail.class">Avalanche\Bundle\ImagineBundle\Imagine\Filter\Loader\ThumbnailFilterLoader</parameter>

        <parameter key="imagine.filter.loader.relative_resize.class">Avalanche\Bundle\ImagineBundle\Imagine\Filter\Loader\RelativeResizeFilterLoader</parameter>

        <parameter key="imagine.filter.loader.resize.class">Avalanche\Bundle\ImagineBundle\Imagine\Filter\Loader\ResizeFilterLoader</parameter>

        <parameter key="imagine.filter.loader.paste.class">Avalanche\Bundle\ImagineBundle\Imagine\Filter\Loader\PasteFilterLoader</parameter>

        <parameter key="imagine.filter.loader.chain.class">Avalanche\Bundle\ImagineBundle\Imagine\Filter\Loader\ChainFilterLoader</parameter>

    </parameters>

    <services>
        
        <!-- Utility services -->

        <service id="imagine.cache.path.resolver" class="%imagine.cache.path.resolver.class%">
            <argument>%imagine.web_root%</argument>
            <argument type="service" id="router" />
        </service>

        <service id="imagine.cache.manager" class="%imagine.cache.manager.class%">
            <argument type="service" id="imagine.cache.path.resolver" />
            <argument type="service" id="imagine" />
            <argument type="service" id="imagine.filter.manager" />
            <argument type="service" id="filesystem" />
            <argument>%imagine.web_root%</argument>
            <argument>%imagine.source_root%</argument>
        </service>

        <service id="imagine.filter.manager" class="%imagine.filter.manager.class%">
            <argument>%imagine.filters%</argument>
        </service>

        <!-- Controller -->

        <service id="imagine.controller" class="%imagine.controller.class%" scope="request">
            <argument type="service" id="request" />
            <argument type="service" id="imagine" />
            <argument type="service" id="imagine.cache.manager" />
            <argument type="service" id="imagine.filter.manager" />
        </service>

        <!-- Route Loader -->

        <service id="imagine.routing.loader" class="%imagine.routing.loader.class%">
            <tag name="routing.loader" />
            <argument>%imagine.cache_prefix%</argument>
            <argument>%imagine.filters%</argument>
        </service>

        <!-- ImagineInterface instances -->
        
        <service id="imagine" alias="imagine.gd" /> 

        <service id="imagine.gd" class="%imagine.gd.class%" />

        <service id="imagine.imagick" class="%imagine.imagick.class%" />

        <service id="imagine.gmagick" class="%imagine.gmagick.class%" />

        <!--  Templating helpers and extensions -->

        <service id="imagine.twig.extension" class="%imagine.twig.extension.class%" public="false">
            <tag name="twig.extension" />
            <argument type="service" id="imagine.cache.path.resolver" />
        </service>

        <service id="imagine.templating.helper" class="%imagine.templating.helper.class%">
            <tag name="templating.helper" alias="imagine" />
            <argument type="service" id="imagine.cache.path.resolver" />
        </service>

        <!-- Filter loaders -->

        <service id="imagine.filter.loader.thumbnail" class="%imagine.filter.loader.thumbnail.class%">
            <tag name="imagine.filter.loader" filter="thumbnail" />
        </service>

        <service id="imagine.filter.loader.relative_resize" class="%imagine.filter.loader.relative_resize.class%">
            <tag name="imagine.filter.loader" filter="relative_resize" />
        </service>

        <service id="imagine.filter.loader.resize" class="%imagine.filter.loader.resize.class%">
            <tag name="imagine.filter.loader" filter="resize" />
        </service>

        <service id="imagine.filter.loader.paste" class="%imagine.filter.loader.paste.class%">
            <argument type="service" id="imagine" />
            <tag name="imagine.filter.loader" filter="paste" />
        </service>

        <service id="imagine.filter.loader.chain" class="%imagine.filter.loader.chain.class%">
            <argument type="service" id="imagine.filter.manager" />
            <tag name="imagine.filter.loader" filter="chain" />
        </service>

    </services>
</container>
