<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">

    <!--DATA-->
    <preference for="Mirasvit\ProductKit\Api\Data\KitInterface" type="Mirasvit\ProductKit\Model\Kit"/>
    <preference for="Mirasvit\ProductKit\Api\Data\KitItemInterface" type="Mirasvit\ProductKit\Model\KitItem"/>

    <!--Entity Manager-->
    <type name="Magento\Framework\EntityManager\MetadataPool">
        <arguments>
            <argument name="metadata" xsi:type="array">
                <item name="Mirasvit\ProductKit\Api\Data\KitInterface" xsi:type="array">
                    <item name="entityTableName" xsi:type="const">Mirasvit\ProductKit\Api\Data\KitInterface::TABLE_NAME</item>
                    <item name="identifierField" xsi:type="const">Mirasvit\ProductKit\Api\Data\KitInterface::ID</item>
                </item>
                <item name="Mirasvit\ProductKit\Api\Data\KitItemInterface" xsi:type="array">
                    <item name="entityTableName" xsi:type="const">Mirasvit\ProductKit\Api\Data\KitItemInterface::TABLE_NAME</item>
                    <item name="identifierField" xsi:type="const">Mirasvit\ProductKit\Api\Data\KitItemInterface::ID</item>
                </item>
            </argument>
        </arguments>
    </type>
    <type name="Magento\Framework\EntityManager\HydratorPool">
        <arguments>
            <argument name="hydrators" xsi:type="array">
                <item name="Mirasvit\ProductKit\Api\Data\KitInterface" xsi:type="string">Magento\Framework\EntityManager\AbstractModelHydrator</item>
                <item name="Mirasvit\ProductKit\Api\Data\KitItemInterface" xsi:type="string">Magento\Framework\EntityManager\AbstractModelHydrator</item>
            </argument>
        </arguments>
    </type>

    <!--UI-->
    <type name="Magento\Framework\View\Element\UiComponent\DataProvider\CollectionFactory">
        <arguments>
            <argument name="collections" xsi:type="array">
                <item name="product_kit_kit_listing_data_source" xsi:type="string">Mirasvit\ProductKit\Model\ResourceModel\Kit\Grid</item>
            </argument>
        </arguments>
    </type>

    <type name="Magento\SalesRule\Model\Validator">
        <plugin name="Mirasvit_ProductKit::applyDiscountM244" type="Mirasvit\ProductKit\Plugin\ApplyDiscountValidatorTotalsPlugin"/>
    </type>

    <type name="Magento\SalesRule\Model\RulesApplier">
        <plugin name="Mirasvit_ProductKit::applyDiscount" type="Mirasvit\ProductKit\Plugin\ApplyDiscountRuleApplierPlugin"/>
    </type>

    <type name="Magento\SalesRule\Model\Rule\Condition\Address">
        <plugin name="Mirasvit_ProductKit::salesRuleCondition" type="Mirasvit\ProductKit\Plugin\Adminhtml\AddKitConditionPlugin"/>
    </type>

    <type name="Magento\SalesRule\Model\Rule\Condition\Product">
        <plugin name="Mirasvit_ProductKit::salesRuleAction" type="Mirasvit\ProductKit\Plugin\Adminhtml\AddKitActionPlugin" sortOrder="1000"/>
    </type>

    <type name="Mirasvit\ProductKit\Repository\KitRepository">
        <plugin name="Mirasvit_ProductKit::indexer" type="Mirasvit\ProductKit\Plugin\IndexerPlugin"/>
    </type>

    <type name="Magento\Quote\Model\Quote\Item">
        <plugin name="Mirasvit_ProductKit::addQuoteItem" type="Mirasvit\ProductKit\Plugin\AddQuoteItemPlugin"/>
    </type>

    <type name="Magento\Framework\Console\CommandListInterface">
        <arguments>
            <argument name="commands" xsi:type="array">
                <item name="mstProductKitReindex" xsi:type="object">Mirasvit\ProductKit\Console\Command\ReindexCommand</item>
            </argument>
        </arguments>
    </type>

    <!--TESTS-->
    <type name="Mirasvit\Tester\Model\RegistryInterface">
        <arguments>
            <argument name="entities" xsi:type="array">
                <item name="product_kit" xsi:type="string">Mirasvit\ProductKit\Test\Codeception\Model\ProductKit</item>
            </argument>
        </arguments>
    </type>
</config>
