<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
    <preference for="Magento\Framework\Serialize\Serializer\Json" type="Zhik\Myoba\Model\Serializer\Json" />
    <type name="Zhik\Myoba\Logger\Handler">
        <arguments>
            <argument name="filesystem" xsi:type="object">Magento\Framework\Filesystem\Driver\File</argument>
        </arguments>
    </type>
    <type name="Zhik\Myoba\Logger\Logger">
        <arguments>
            <argument name="name" xsi:type="string">zhikMyoba</argument>
            <argument name="handlers"  xsi:type="array">
                <item name="system" xsi:type="object">Zhik\Myoba\Logger\Handler</item>
            </argument>
        </arguments>
    </type>
    <virtualType name="Magento\Sales\Model\ResourceModel\Order\Grid">
        <arguments>
            <argument name="columns" xsi:type="array">
                <item name="myoba_id" xsi:type="string">sales_order.myoba_id</item>
            </argument>
        </arguments>
    </virtualType>
    <virtualType name="ShipmentGridAggregator">
        <arguments>
            <argument name="columns" xsi:type="array">
                <item name="myoba_id" xsi:type="string">sales_shipment.myoba_id</item>
            </argument>
        </arguments>
    </virtualType>

    <!-- Overrides for inventory reservation changes -->
    <type name="Magento\InventorySales\Observer\CatalogInventory\CancelOrderItemObserver">
        <plugin name="zhik_myoba_stock_reservations" type="Zhik\Myoba\Plugin\InventorySales\Observer\CatalogInventory\CancelOrderItemObserver" />
    </type>
    <type name="Magento\InventorySales\Model\ReturnProcessor\ProcessRefundItems">
        <plugin name="zhik_myoba_stock_reservations" type="Zhik\Myoba\Plugin\InventorySales\Model\ReturnProcessor\ProcessRefundItems" />
    </type>
    <type name="Magento\InventorySales\Model\ReturnProcessor\DeductSourceItemQuantityOnRefund">
        <plugin name="zhik_myoba_stock_reservations" type="Zhik\Myoba\Plugin\InventorySales\Model\ReturnProcessor\DeductSourceItemQuantityOnRefund" />
    </type>
    <type name="Magento\SalesInventory\Model\Order\ReturnProcessor">
        <plugin name="zhik_myoba_stock_reservations" type="Zhik\Myoba\Plugin\SalesInventory\Model\Order\ReturnProcessor" />
    </type>
    <type name="Magento\CatalogInventory\Observer\CancelOrderItemObserver">
        <plugin name="zhik_myoba_stock_reservations" type="Zhik\Myoba\Plugin\CatalogInventory\Observer\CancelOrderItemObserver" />
    </type>

    <!-- Ensure correct stock_id is used for trade customers that use a different stock  -->
    <type name="Magento\Sales\Api\OrderManagementInterface">
        <plugin name="inventory_reservations_placement" type="Zhik\Myoba\Plugin\InventorySales\AppendReservationsAfterOrderPlacement"/>
    </type>
    <preference for="Magento\InventorySalesApi\Api\PlaceReservationsForSalesEventInterface" type="Zhik\Myoba\Model\InventorySales\PlaceReservationsForSalesEvent"/>

    <!-- Add retail_reserved_qty column to inventory indexer -->
    <type name="Magento\InventoryIndexer\Indexer\IndexStructure">
        <plugin name="zhik_myoba_retail_reserved_qty" type="Zhik\Myoba\Plugin\InventoryIndexer\IndexStructure"/>
    </type>
    <type name="Magento\InventoryIndexer\Indexer\SelectBuilder">
        <plugin name="zhik_myoba_retail_reserved_qty" type="Zhik\Myoba\Plugin\InventoryIndexer\SelectBuilder"/>
    </type>
    <type name="Magento\Inventory\Model\ResourceModel\SourceItem\SaveMultiple">
        <plugin name="zhik_myoba_retail_reserved_qty" type="Zhik\Myoba\Plugin\Inventory\Model\ResourceModel\SourceItem\SaveMultiple"/>
    </type>

    <preference for="Zhik\ThresholdTaxes\Model\TaxRateCollection" type="Zhik\Myoba\Model\Tax\TaxRateCollection"/>

    <type name="Magento\Security\Model\SecurityChecker\Frequency">
        <plugin name="zhik_myoba_passreset_frequency" type="Zhik\Myoba\Plugin\SecurityChecker\Frequency"/>
    </type>
    <type name="Magento\Security\Model\SecurityChecker\Quantity">
        <plugin name="zhik_myoba_passreset_quantity" type="Zhik\Myoba\Plugin\SecurityChecker\Quantity"/>
    </type>

</config>
