<?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>

        <!-- Entities -->
        <service id="Acris\Faq\Custom\FaqDefinition">
            <tag name="shopware.entity.definition" entity="acris_faq"/>
        </service>
        <service id="Acris\Faq\Custom\FaqKeywordDefinition">
            <tag name="shopware.entity.definition" entity="acris_faq_keyword"/>
        </service>
        <service id="Acris\Faq\Custom\Aggregate\FaqTranslation\FaqTranslationDefinition">
            <tag name="shopware.entity.definition" entity="acris_faq_translation"/>
        </service>
        <service id="Acris\Faq\Custom\FaqGroupDefinition">
            <tag name="shopware.entity.definition" entity="acris_faq_group"/>
        </service>
        <service id="Acris\Faq\Custom\Aggregate\FaqGroupProductStream\FaqGroupProductStreamDefinition">
            <tag name="shopware.entity.definition" entity="acris_faq_group_product_stream"/>
        </service>
        <service id="Acris\Faq\Custom\Aggregate\FaqGroupCategories\FaqGroupCategoriesDefinition">
            <tag name="shopware.entity.definition" entity="acris_faq_group_cat"/>
        </service>
        <service id="Acris\Faq\Custom\Aggregate\FaqsGroups\FaqsGroupsDefinition">
            <tag name="shopware.entity.definition" entity="acris_faqs_groups"/>
        </service>
        <service id="Acris\Faq\Custom\Aggregate\FaqDocumentLanguage\FaqDocumentLanguageDefinition">
            <tag name="shopware.entity.definition" entity="acris_faq_document_language"/>
        </service>
        <service id="Acris\Faq\Custom\FaqDocumentDefinition">
            <tag name="shopware.entity.definition" entity="acris_faq_document"/>
        </service>
        <service id="Acris\Faq\Custom\Aggregate\FaqDocumentTranslation\FaqDocumentTranslationDefinition">
            <tag name="shopware.entity.definition" entity="acris_faq_document_translation"/>
        </service>
        <service id="Acris\Faq\Custom\Aggregate\FaqGroupTranslation\FaqGroupTranslationDefinition">
            <tag name="shopware.entity.definition" entity="acris_faq_group_translation"/>
        </service>
        <service id="Acris\Faq\Custom\Aggregate\FaqRule\FaqRuleDefinition">
            <tag name="shopware.entity.definition" entity="acris_faq_rule"/>
        </service>
        <service id="Acris\Faq\Custom\Aggregate\FaqSalesChannel\FaqSalesChannelDefinition">
            <tag name="shopware.entity.definition" entity="acris_faq_sales_channel"/>
        </service>
        <service id="Acris\Faq\Custom\Aggregate\FaqGroupRule\FaqGroupRuleDefinition">
            <tag name="shopware.entity.definition" entity="acris_faq_group_rule"/>
        </service>
        <service id="Acris\Faq\Custom\Aggregate\FaqGroupSalesChannel\FaqGroupSalesChannelDefinition">
            <tag name="shopware.entity.definition" entity="acris_faq_group_sales_channel"/>
        </service>
        <service id="Acris\Faq\Custom\Aggregate\FaqProduct\FaqProductDefinition">
            <tag name="shopware.entity.definition" entity="acris_faq_product"/>
        </service>
        <service id="Acris\Faq\Custom\Aggregate\FaqGroupProduct\FaqGroupProductDefinition">
            <tag name="shopware.entity.definition" entity="acris_faq_group_product"/>
        </service>


        <!-- Extensions -->
        <service id="Acris\Faq\Custom\LanguageExtension">
            <tag name="shopware.entity.extension"/>
        </service>
        <service id="Acris\Faq\Custom\MediaExtension">
            <tag name="shopware.entity.extension"/>
        </service>
        <service id="Acris\Faq\Custom\ProductStreamExtension">
            <tag name="shopware.entity.extension"/>
        </service>
        <service id="Acris\Faq\Custom\CmsPageExtension">
            <tag name="shopware.entity.extension"/>
        </service>
        <service id="Acris\Faq\Custom\RuleExtension">
            <tag name="shopware.entity.extension"/>
        </service>
        <service id="Acris\Faq\Custom\SalesChannelExtension">
            <tag name="shopware.entity.extension"/>
        </service>
        <service id="Acris\Faq\Custom\ProductExtension">
            <tag name="shopware.entity.extension"/>
        </service>

        <!-- Own Services -->
        <service id="Acris\Faq\Components\Faq\FaqService">
            <argument id="acris_faq.repository" type="service"/>
            <argument id="media.repository" type="service"/>
            <argument id="Shopware\Core\System\SystemConfig\SystemConfigService" type="service"/>
        </service>

        <service id="Acris\Faq\Components\Faq\FaqCmsPageService">
            <argument id="Shopware\Core\Content\Cms\SalesChannel\SalesChannelCmsPageLoader" type="service"/>
            <argument type="service" id="Acris\Faq\Custom\FaqDefinition"/>
        </service>

        <service id="Acris\Faq\Components\Faq\FaqGroupCmsPageService">
            <argument id="Shopware\Core\Content\Cms\SalesChannel\SalesChannelCmsPageLoader" type="service"/>
            <argument type="service" id="Acris\Faq\Custom\FaqGroupDefinition"/>
        </service>

        <!-- Cms data resolver -->
        <service id="Acris\Faq\Core\Content\Cms\DataResolver\Element\FaqCmsElementResolver">
            <argument type="service" id="Acris\Faq\Components\Faq\FaqService"/>
            <argument type="service" id="Acris\Faq\Custom\FaqDefinition"/>
            <argument type="service" id="service_container"/>
            <argument type="service" id="Acris\Faq\Custom\SalesChannel\FaqGroupRoute"/>
            <tag name="shopware.cms.data_resolver"/>
        </service>

        <service id="Acris\Faq\Core\Content\Cms\DataResolver\Element\FaqSingleCmsElementResolver">
            <argument type="service" id="Acris\Faq\Components\Faq\FaqService"/>
            <argument type="service" id="acris_faq.repository"/>
            <argument type="service" id="Acris\Faq\Custom\FaqDefinition"/>
            <argument type="service" id="service_container"/>
            <tag name="shopware.cms.data_resolver"/>
        </service>

        <!-- Controllers -->
        <service id="Acris\Faq\Storefront\Controller\FaqController" public="true">
            <call method="setContainer">
                <argument type="service" id="service_container"/>
            </call>
            <argument type="service" id="Acris\Faq\Storefront\Page\FaqDetail\FaqDetailPageLoader"/>
            <argument type="service" id="Acris\Faq\Core\Content\Cms\DataResolver\Element\DummyClasses\SalesChannelCmsPageDummyLoader"/>
            <argument type="service" id="Acris\Faq\Custom\FaqDefinition"/>
            <argument type="service" id="Acris\Faq\Custom\SalesChannel\FaqRoute"/>
        </service>

        <!-- Routes -->
        <service id="Acris\Faq\Custom\SalesChannel\FaqGroupRoute" public="true">
            <argument type="service" id="acris_faq_group.repository"/>
        </service>

        <service id="Acris\Faq\Custom\SalesChannel\CachedFaqGroupRoute"
                 decorates="Acris\Faq\Custom\SalesChannel\FaqGroupRoute"
                 decoration-priority="-1000" public="true">
            <argument type="service" id="Acris\Faq\Custom\SalesChannel\CachedFaqGroupRoute.inner"/>
            <argument type="service" id="cache.object"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Cache\EntityCacheKeyGenerator"/>
            <argument type="service" id="event_dispatcher"/>
        </service>

        <service id="Acris\Faq\Custom\SalesChannel\FaqRoute" public="true">
            <argument type="service" id="Acris\Faq\Components\Faq\FaqService"/>
            <argument type="service" id="Shopware\Core\Content\Cms\SalesChannel\SalesChannelCmsPageLoader"/>
            <argument type="service" id="Acris\Faq\Custom\FaqDefinition"/>
        </service>

        <!-- Subscriber -->
        <service id="Acris\Faq\Storefront\Subscriber\AcrisSearchFaqSubscriber">
            <argument type="service" id="Acris\Faq\Components\Faq\FaqService"/>
            <tag name="kernel.event_subscriber"/>
        </service>

        <service id="Acris\Faq\Storefront\Subscriber\ConfigSubscriber">
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Indexing\EntityIndexerRegistry"/>
            <tag name="kernel.event_subscriber"/>
        </service>

        <service id="Acris\Faq\Storefront\Subscriber\ContentSearchSubscriber">
            <argument type="service" id="Shopware\Core\System\SystemConfig\SystemConfigService"/>
            <argument type="service" id="Acris\Faq\Components\ContentSearch\FaqSearchService"/>
            <argument type="service" id="Acris\Faq\Components\SearchTotal\Struct\SearchTotalService"/>

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

        <service id="Acris\Faq\Storefront\Subscriber\ProductLoadedSubscriber">
            <argument type="service" id="Acris\Faq\Components\Faq\FaqService"/>
            <argument type="service" id="Acris\Faq\Custom\SalesChannel\FaqGroupRoute"/>
            <argument type="service" id="Acris\Faq\Components\Faq\FaqCmsPageService"/>
            <argument type="service" id="Acris\Faq\Components\Faq\FaqGroupCmsPageService"/>

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

        <service id="Acris\Faq\Storefront\Subscriber\ProductCriteriaSubscriber">
            <tag name="kernel.event_subscriber"/>
        </service>

        <service id="Acris\Faq\Storefront\Subscriber\FaqCacheSubscriber">
            <tag name="kernel.event_subscriber"/>
            <argument type="service" id="Shopware\Core\Framework\Adapter\Cache\CacheInvalidator"/>
        </service>

        <service id="Acris\Faq\Storefront\Subscriber\FaqVideoMetaSubscriber">
            <tag name="kernel.event_subscriber"/>
            <argument type="service" id="Acris\Faq\Components\Faq\FaqService"/>
        </service>

        <service id="Acris\Faq\Storefront\Subscriber\ProductPageSubscriber">
            <argument id="Acris\Faq\Components\Faq\Content\ContentProcessorInterface" type="service"/>
            <tag name="kernel.event_subscriber"/>
        </service>

        <!-- Content Search -->
        <service id="Acris\Faq\Components\ContentSearch\FaqSearchService">
            <argument type="service" id="acris_faq.repository"/>
            <argument type="service" id="Acris\Faq\Components\Faq\FaqService" />
        </service>

        <!-- PageLoader -->
        <service id="Acris\Faq\Storefront\Page\FaqDetail\FaqDetailPageLoader" public="true">
            <argument type="service" id="event_dispatcher"/>
            <argument type="service" id="Shopware\Storefront\Page\GenericPageLoader"/>
            <argument type="service" id="Acris\Faq\Custom\SalesChannel\FaqRoute"/>
            <argument type="service" id="Shopware\Core\Content\Seo\SeoUrlPlaceholderHandlerInterface"/>
            <argument type="service" id="Shopware\Core\System\SystemConfig\SystemConfigService"/>
        </service>

        <!-- Indexer -->
        <service id="Acris\Faq\Core\Content\Faq\DataAbstractionLayer\FaqIndexer">
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Dbal\Common\IteratorFactory"/>
            <argument type="service" id="acris_faq.repository"/>
            <argument type="service" id="Doctrine\DBAL\Connection"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Indexing\InheritanceUpdater"/>
            <argument type="service" id="event_dispatcher"/>
            <tag name="shopware.entity_indexer" priority="100"/>
        </service>

        <!-- SEO url route -->
        <service id="Acris\Faq\Storefront\Framework\Seo\SeoUrlRoute\FaqSeoUrlUpdateListener">
            <argument type="service" id="Shopware\Core\Content\Seo\SeoUrlUpdater"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Indexing\EntityIndexerRegistry"/>
            <tag name="kernel.event_subscriber"/>
        </service>

        <!-- SEO route -->
        <service id="Acris\Faq\Storefront\Framework\Seo\SeoUrlRoute\FaqPageSeoUrlRoute">
            <argument type="service" id="Acris\Faq\Custom\FaqDefinition"/>
            <tag name="shopware.seo_url.route"/>
        </service>

        <!-- Cookie provider -->
        <service id="Acris\Faq\Framework\Cookie\VideoCookieProvider"
                 decorates="Shopware\Storefront\Framework\Cookie\CookieProviderInterface">
            <argument type="service" id="Acris\Faq\Framework\Cookie\VideoCookieProvider.inner"/>
        </service>

        <!-- Scheduled task -->
        <service id="Acris\Faq\ScheduledTask\MetaDataTask">
            <tag name="shopware.scheduled.task"/>
        </service>

        <service id="Acris\Faq\ScheduledTask\MetaDataTaskHandler">
            <argument type="service" id="scheduled_task.repository"/>
            <argument type="service" id="logger"/>
            <argument type="service" id="Acris\Faq\Components\Faq\FaqService"/>
            <tag name="messenger.message_handler"/>
        </service>

        <!-- Dummy SalesChannelCmsPageLoader class -->
        <service id="Acris\Faq\Core\Content\Cms\DataResolver\Element\DummyClasses\SalesChannelCmsPageDummyLoader" public="true">
            <argument type="service" id="cms_page.repository"/>
            <argument type="service" id="Shopware\Core\Content\Cms\DataResolver\CmsSlotsDataResolver"/>
            <argument type="service" id="event_dispatcher"/>
        </service>

        <service id="Acris\Faq\Components\SearchTotal\Struct\SearchTotalService" />
        <service id="Acris\Faq\Components\Faq\Content\ConfigInterface" class="Acris\Faq\Components\Faq\Content\Config">
            <argument type="service" id="custom_field.repository"/>
            <argument type="service" id="Shopware\Core\System\SystemConfig\SystemConfigService"/>
        </service>

        <service id="Acris\Faq\Components\Faq\Content\FaqMatchInterface" class="Acris\Faq\Components\Faq\Content\FaqMatch">
            <argument type="service" id="acris_faq.repository"/>
            <argument type="service" id="Doctrine\DBAL\Connection" />
            <argument type="service" id="Acris\Faq\Components\Faq\FaqService" />
        </service>

        <service id="Acris\Faq\Components\Faq\Content\MatchReplaceProcessorInterface" class="Acris\Faq\Components\Faq\Content\MatchReplaceProcessor"/>

        <service id="Acris\Faq\Components\Faq\Content\ContentProcessorInterface" class="Acris\Faq\Components\Faq\Content\ContentProcessor">
            <argument type="service" id="Acris\Faq\Components\Faq\Content\ConfigInterface"/>
            <argument type="service" id="Acris\Faq\Components\Faq\Content\FaqMatchInterface"/>
            <argument type="service" id="Acris\Faq\Components\Faq\Content\MatchReplaceProcessorInterface"/>
            <argument type="service" id="Shopware\Core\System\SystemConfig\SystemConfigService"/>
        </service>

        <!-- Sitemap -->
        <service id="Acris\Faq\Core\Content\Sitemap\Provider\FaqUrlProvider">
            <argument type="service" id="Doctrine\DBAL\Connection"/>
            <argument type="service" id="Shopware\Core\System\SystemConfig\SystemConfigService"/>
            <argument type="service" id="acris_faq.repository"/>
            <argument type="service" id="router"/>

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

        <!-- Import -->
        <service id="Acris\Faq\Storefront\Subscriber\ImportExportSubscriber">
            <argument type="service" id="media.repository"/>
            <argument type="service" id="acris_faq.repository"/>
            <argument type="service" id="acris_faq_group.repository"/>
            <tag name="kernel.event_subscriber"/>
        </service>

        <!-- Twig extensions -->
        <service id="Twig\Extension\StringLoaderExtension">
            <tag name="twig.extension"/>
        </service>
    </services>
</container>
