<?xml version="1.0"?>
<!--
/**
 * @author Amasty Team
 * @copyright Copyright (c) Amasty (https://www.amasty.com)
 * @package Google Page Speed Optimizer Base for Magento 2
 */-->
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
    <preference for="Amasty\PageSpeedOptimizer\Api\Data\DiagnosticResultInterface"
                type="Amasty\PageSpeedOptimizer\Model\DiagnosticResult\DiagnosticResult" />
    <preference for="Amasty\PageSpeedOptimizer\Api\DiagnosticResultRepositoryInterface"
                type="Amasty\PageSpeedOptimizer\Model\DiagnosticResult\DiagnosticResultRepository" />

    <type name="Amasty\PageSpeedTools\Model\Output\ProcessorsResolver">
        <arguments>
            <argument name="defaultProcessors" xsi:type="array">
                <item name="moveJs" xsi:type="array">
                    <item name="sortOrder" xsi:type="number">20</item>
                    <item name="processor" xsi:type="object">Amasty\PageSpeedOptimizer\Model\Output\MoveJsProcessor</item>
                </item>
                <item name="moveCss" xsi:type="array">
                    <item name="sortOrder" xsi:type="number">60</item>
                    <item name="processor" xsi:type="object">Amasty\PageSpeedOptimizer\Model\Output\MoveCssProcessor</item>
                </item>
                <item name="checkBundling" xsi:type="array">
                    <item name="sortOrder" xsi:type="number">80</item>
                    <item name="processor" xsi:type="object">Amasty\PageSpeedOptimizer\Model\Output\CheckBundlingProcessor</item>
                </item>
                <item name="assetCollector" xsi:type="array">
                    <item name="sortOrder" xsi:type="number">100</item>
                    <item name="processor" xsi:type="object">Amasty\PageSpeedOptimizer\Model\Output\AssetCollectorProcessor</item>
                </item>
            </argument>
        </arguments>
    </type>

    <type name="Magento\Framework\View\Asset\Config">
        <plugin name="excludePagesFromMergeBundle" type="Amasty\PageSpeedOptimizer\Plugin\ExcludePageFromMergeBundle" />
    </type>
    <type name="Magento\Deploy\Package\Bundle\RequireJs">
        <plugin name="amastyBundling" type="Amasty\PageSpeedOptimizer\Plugin\Deploying\Bundling" />
    </type>
    <type name="Magento\Deploy\Service\Bundle">
        <plugin name="getDeployConfig" type="Amasty\PageSpeedOptimizer\Plugin\Deploying\Deploy" />
    </type>
    <type name="Magento\Framework\View\Template\Html\Minifier">
        <plugin name="Amasty_PageSpeedOptimizer::static_deploy_js_minification" type="Amasty\PageSpeedOptimizer\Plugin\View\Template\Html\MinifierPlugin" />
    </type>
    <type name="Amasty\PageSpeedOptimizer\Model\Js\InlineJsMinifier">
        <arguments>
            <argument name="replacements" xsi:type="array">
                <item name="__MINIFIED_HEREDOC__" xsi:type="string"><![CDATA[/<<<([A-z]+).*?\1;/ims]]></item>
                <item name="__MINIFIED_PHP__" xsi:type="string"><![CDATA[/\<\?(?=(=|php)).*?\?\>/ms]]></item>
                <item name="__MINIFIED_EJS__" xsi:type="string"><![CDATA[/\s<\%.*?\%\>/ims]]></item>
            </argument>
        </arguments>
    </type>

    <type name="Magento\Framework\App\Response\HeaderManager">
        <arguments>
            <argument name="headerProviderList" xsi:type="array">
                <item name="AmastyXFrameOptions" xsi:type="object">Amasty\PageSpeedOptimizer\Model\HeaderProvider\XFrameOptions</item>
                <item name="AmastyContentSecurityPolicy" xsi:type="object">Amasty\PageSpeedOptimizer\Model\HeaderProvider\ContentSecurityPolicy</item>
            </argument>
        </arguments>
    </type>
    <type name="Amasty\PageSpeedOptimizer\Model\OptionSource\ServerPushAssetTypes">
        <arguments>
            <argument name="assetTypes" xsi:type="array">
                <item name="js" translatable="true" xsi:type="string">JS Files</item>
                <item name="css" translatable="true" xsi:type="string">CSS Files</item>
                <item name="font" translatable="true" xsi:type="string">Font Files</item>
            </argument>
        </arguments>
    </type>
    <type name="Amasty\PageSpeedOptimizer\Model\Asset\CollectorAdapter">
        <arguments>
            <argument name="collectors" xsi:type="array">
                <item name="js" xsi:type="object">Amasty\PageSpeedOptimizer\Model\Asset\Collector\JsCollector</item>
                <item name="css" xsi:type="object">Amasty\PageSpeedOptimizer\Model\Asset\Collector\CssCollector</item>
                <item name="font" xsi:type="object">Amasty\PageSpeedOptimizer\Model\Asset\Collector\FontCollector</item>
            </argument>
        </arguments>
    </type>

    <type name="Amasty\PageSpeedOptimizer\Model\OptionSource\ServerPush">
        <arguments>
            <argument name="options" xsi:type="array">
                <item name="basic" xsi:type="array">
                    <item name="key" xsi:type="const">Amasty\PageSpeedOptimizer\Model\OptionSource\ServerPush::BASIC</item>
                    <item name="label" xsi:type="string" translatable="true">Basic</item>
                </item>
                <item name="advanced" xsi:type="array">
                    <item name="key" xsi:type="const">Amasty\PageSpeedOptimizer\Model\OptionSource\ServerPush::ADVANCED</item>
                    <item name="label" xsi:type="string" translatable="true">Advanced</item>
                    <item name="requested_module" xsi:type="string">Amasty_OptimizerSubscriptionFunctionality</item>
                </item>
            </argument>
        </arguments>
    </type>

    <type name="Magento\Config\Model\Config\TypePool">
        <arguments>
            <argument name="sensitive" xsi:type="array">
                <item name="amoptimizer/general/api_key" xsi:type="string">1</item>
            </argument>
        </arguments>
    </type>
</config>
