<?xml version="1.0"?>
<!--
/**
 * @author Amasty Team
 * @copyright Copyright (c) Amasty (https://www.amasty.com)
 * @package Improved Sorting for Magento 2
 */-->

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
    <type name="Magento\Catalog\Block\Product\ProductList\Toolbar">
        <plugin name="Amasty_Sorting::catalogToolbar" type="Amasty\Sorting\Plugin\Catalog\Product\ProductList\Toolbar"/>
    </type>

    <type name="Magento\Catalog\Model\ResourceModel\Product\Collection">
        <plugin name="Amasty_Sorting::SortingMethodsProcessor" type="Amasty\Sorting\Plugin\Catalog\Product\Collection"/>
    </type>
    <type name="Amasty\Sorting\Plugin\CatalogSearch\Model\ResourceModel\Fulltext\Collection\ApplySorting">
        <arguments>
            <argument name="isFulltextCollection" xsi:type="boolean">true</argument>
        </arguments>
    </type>
    <type name="Magento\CatalogSearch\Model\ResourceModel\Fulltext\Collection">
        <plugin name="Amasty_Sorting::SortingMethodsProcessor"
                type="Amasty\Sorting\Plugin\CatalogSearch\Model\ResourceModel\Fulltext\Collection\ApplySorting"/>
    </type>
    <type name="Amasty\Shopby\Model\ResourceModel\Fulltext\Collection">
        <plugin name="Amasty_Sorting::SortingMethodsProcessor"
                type="Amasty\Sorting\Plugin\CatalogSearch\Model\ResourceModel\Fulltext\Collection\ApplySorting"/>
    </type>
    <type name="Amasty\ShopbyLite\Model\ResourceModel\Fulltext\Collection">
        <plugin name="Amasty_Sorting::SortingMethodsProcessor"
                type="Amasty\Sorting\Plugin\CatalogSearch\Model\ResourceModel\Fulltext\Collection\ApplySorting"/>
    </type>

    <type name="Magento\Catalog\Model\ResourceModel\Product\Collection">
        <plugin name="Amasty_Sorting::prevent_double_sort"
                type="Amasty\Sorting\Plugin\Catalog\Model\ResourceModel\Product\Collection\PreventDoubleSort" />
    </type>
    <type name="Magento\CatalogSearch\Block\Result">
        <plugin name="Amasty_Sorting::SetDefaultSortBy" type="Amasty\Sorting\Plugin\Block\Result"/>
    </type>
    <type name="Magento\Catalog\Helper\Product\ProductList">
        <plugin name="Amasty_Sorting::GetDefaultSortField" type="Amasty\Sorting\Plugin\Catalog\Helper\Product\ProductList"/>
    </type>
    <type name="Magento\Catalog\Block\Product\ListProduct">
        <plugin name="Amasty_Sorting::AddIdentities" type="Amasty\Sorting\Plugin\Catalog\Product\ListProduct"/>
    </type>
    <type name="Magento\Catalog\Model\Category">
        <plugin name="Amasty_Sorting::sort_available_options" type="Amasty\Sorting\Plugin\Catalog\Model\Category\SortAvailableOptions"/>
    </type>

    <type name="Amasty\Xsearch\Block\Search\Product">
        <plugin name="Amasty_Sorting::AddSortOrders"
                type="Amasty\Sorting\Plugin\Xsearch\Block\Search\Product\AddSortOrders"/>
    </type>
    <type name="Amasty\Xsearch\Model\Adapter\Product">
        <plugin name="Amasty_Sorting::AddSortOrders"
                type="Amasty\Sorting\Plugin\Xsearch\Model\Adapter\Product\AddSortOrders"/>
    </type>
    <type name="Amasty\Sorting\Plugin\Xsearch\Model\Adapter\Product\AddSortOrders">
        <arguments>
            <argument name="getDefaultSortOrders"
                      xsi:type="object">Amasty\Sorting\Model\Method\GetAllSortOrders</argument>
        </arguments>
    </type>

    <virtualType name="Amasty\Sorting\Model\Method\GetAllSortOrders"
                 type="Amasty\Sorting\Model\Method\GetDefaultSortOrders">
        <arguments>
            <argument name="withHighOrders" xsi:type="boolean">true</argument>
        </arguments>
    </virtualType>
</config>
