<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
    <preference for="Firegento\ContentProvisioning\Api\ConfigurationInterface" type="Firegento\ContentProvisioning\Model\Config\Data" />
    <preference for="Firegento\ContentProvisioning\Api\StoreCodeResolverInterface" type="Firegento\ContentProvisioning\Model\Resolver\StoreCodeResolver" />
    <preference for="Firegento\ContentProvisioning\Api\Data\PageEntryInterface" type="Firegento\ContentProvisioning\Model\PageEntry" />
    <preference for="Firegento\ContentProvisioning\Api\Data\BlockEntryInterface" type="Firegento\ContentProvisioning\Model\BlockEntry" />
    <preference for="Firegento\ContentProvisioning\Api\TargetMediaDirectoryPathProviderInterface" type="Firegento\ContentProvisioning\Model\Configuration\TargetMediaDirectoryPathProvider" />

    <virtualType name="Firegento\ContentProvisioning\Virtual\Config\Parser\PageContentParser" type="Firegento\ContentProvisioning\Model\Config\Parser\ContentParser">
        <arguments>
            <argument name="arrayKey" xsi:type="const">Firegento\ContentProvisioning\Api\Data\PageEntryInterface::CONTENT</argument>
        </arguments>
    </virtualType>
    <virtualType name="Firegento\ContentProvisioning\Virtual\Config\Parser\PageParserChain" type="Firegento\ContentProvisioning\Model\Config\Parser\ParserChain">
        <arguments>
            <argument name="parser" xsi:type="array">
                <item name="meta" xsi:type="object">Firegento\ContentProvisioning\Model\Config\Parser\MetaDataParser</item>
                <item name="stores" xsi:type="object">Firegento\ContentProvisioning\Model\Config\Parser\StoresParser</item>
                <item name="content" xsi:type="object">Firegento\ContentProvisioning\Virtual\Config\Parser\PageContentParser</item>
                <item name="content_heading" xsi:type="object">Firegento\ContentProvisioning\Model\Config\Parser\ContentHeadingParser</item>
                <item name="seo" xsi:type="object">Firegento\ContentProvisioning\Model\Config\Parser\SeoParser</item>
                <item name="design" xsi:type="object">Firegento\ContentProvisioning\Model\Config\Parser\DesignParser</item>
                <item name="custom_design" xsi:type="object">Firegento\ContentProvisioning\Model\Config\Parser\CustomDesignParser</item>
                <item name="media_directory" xsi:type="object">Firegento\ContentProvisioning\Model\Config\Parser\MediaDirectoryParser</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="Firegento\ContentProvisioning\Virtual\Config\Parser\BlockContentParser" type="Firegento\ContentProvisioning\Model\Config\Parser\ContentParser">
        <arguments>
            <argument name="arrayKey" xsi:type="const">Firegento\ContentProvisioning\Api\Data\BlockEntryInterface::CONTENT</argument>
        </arguments>
    </virtualType>
    <virtualType name="Firegento\ContentProvisioning\Virtual\Config\Parser\BlockParserChain" type="Firegento\ContentProvisioning\Model\Config\Parser\ParserChain">
        <arguments>
            <argument name="parser" xsi:type="array">
                <item name="meta" xsi:type="object">Firegento\ContentProvisioning\Model\Config\Parser\MetaDataParser</item>
                <item name="stores" xsi:type="object">Firegento\ContentProvisioning\Model\Config\Parser\StoresParser</item>
                <item name="content" xsi:type="object">Firegento\ContentProvisioning\Virtual\Config\Parser\BlockContentParser</item>
                <item name="media_directory" xsi:type="object">Firegento\ContentProvisioning\Model\Config\Parser\MediaDirectoryParser</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="Firegento\ContentProvisioning\Virtual\Config\PageNodeConverter" type="Firegento\ContentProvisioning\Model\Config\NodeConverter">
        <arguments>
            <argument name="configParser" xsi:type="object">Firegento\ContentProvisioning\Virtual\Config\Parser\PageParserChain</argument>
            <argument name="nodeName" xsi:type="string">page</argument>
        </arguments>
    </virtualType>
    <virtualType name="Firegento\ContentProvisioning\Virtual\Config\BlockNodeConverter" type="Firegento\ContentProvisioning\Model\Config\NodeConverter">
        <arguments>
            <argument name="configParser" xsi:type="object">Firegento\ContentProvisioning\Virtual\Config\Parser\BlockParserChain</argument>
            <argument name="nodeName" xsi:type="string">block</argument>
        </arguments>
    </virtualType>

    <type name="Firegento\ContentProvisioning\Model\Config\Converter">
        <arguments>
            <argument name="pageNodeConverter" xsi:type="object">Firegento\ContentProvisioning\Virtual\Config\PageNodeConverter</argument>
            <argument name="blockNodeConverter" xsi:type="object">Firegento\ContentProvisioning\Virtual\Config\BlockNodeConverter</argument>
        </arguments>
    </type>

    <virtualType name="Firegento\ContentProvisioning\Model\Config\Reader" type="Magento\Framework\Config\Reader\Filesystem">
        <arguments>
            <argument name="fileName" xsi:type="string">content_provisioning.xml</argument>
            <argument name="converter" xsi:type="object">Firegento\ContentProvisioning\Model\Config\Converter</argument>
            <argument name="schemaLocator" xsi:type="object">Firegento\ContentProvisioning\Model\Config\SchemaLocator</argument>
            <argument name="idAttributes" xsi:type="array">
                <item name="/config/page" xsi:type="string">key</item>
                <item name="/config/block" xsi:type="string">key</item>
            </argument>
        </arguments>
    </virtualType>
    <type name="Firegento\ContentProvisioning\Model\Config\Data">
        <arguments>
            <argument name="reader" xsi:type="object">Firegento\ContentProvisioning\Model\Config\Reader</argument>
            <argument name="cacheId" xsi:type="string">content_provisioning_config</argument>
        </arguments>
    </type>

    <type name="Magento\Framework\Console\CommandListInterface">
        <arguments>
            <argument name="commands" xsi:type="array">
                <item name="contentProvisioning.PageList" xsi:type="object">Firegento\ContentProvisioning\Model\Console\PageListCommand</item>
                <item name="contentProvisioning.BlockList" xsi:type="object">Firegento\ContentProvisioning\Model\Console\BlockListCommand</item>
                <item name="contentProvisioning.PageAdd" xsi:type="object">Firegento\ContentProvisioning\Model\Console\AddPageCommand</item>
                <item name="contentProvisioning.BlockAdd" xsi:type="object">Firegento\ContentProvisioning\Model\Console\AddBlockCommand</item>
            </argument>
        </arguments>
    </type>

    <type name="Firegento\ContentProvisioning\Model\Resolver\ContentResolverProvider">
        <arguments>
            <argument name="contentResolvers" xsi:type="array">
                <item name="plain" xsi:type="object">Firegento\ContentProvisioning\Model\Resolver\PlainContentResolver</item>
                <item name="file" xsi:type="object">Firegento\ContentProvisioning\Model\Resolver\FileContentResolver</item>
            </argument>
        </arguments>
    </type>

    <type name="Firegento\ContentProvisioning\Model\Config\Parser\Query\FetchMediaFilesChain">
        <arguments>
            <argument name="parsers" xsi:type="array">
                <item name="media_directive" xsi:type="object">Firegento\ContentProvisioning\Model\Config\Parser\Query\Media\MediaDirectiveFileParser</item>
            </argument>
        </arguments>
    </type>
</config>