<?xml version="1.0"?>
<!--
/**
 * @author Amasty Team
 * @copyright Copyright (c) Amasty (https://www.amasty.com)
 * @package Pixel Core 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\PixelCore\Model\Event\EventProcessorInterface"
                type="Amasty\PixelCore\Model\Event\EventProcessor"/>
    <preference for="Amasty\PixelCore\Model\Storage\StorageInterface"
                type="Amasty\PixelCore\Model\Storage\LocalStorage"/>

    <virtualType name="Amasty\PixelCore\Model\Storage\Session\Storage" type="Magento\Framework\Session\Storage">
        <arguments>
            <argument name="namespace" xsi:type="string">amasty_pixel</argument>
        </arguments>
    </virtualType>
    <type name="Amasty\PixelCore\Model\Storage\SessionStorage">
        <arguments>
            <argument name="storage" xsi:type="object">Amasty\PixelCore\Model\Storage\Session\Storage</argument>
        </arguments>
    </type>
    <type name="Amasty\PixelCore\Model\Storage\StorageResolver">
        <arguments>
            <argument name="storagePool" xsi:type="array">
                <item name="local" xsi:type="object">Amasty\PixelCore\Model\Storage\LocalStorage</item>
                <item name="session" xsi:type="object">Amasty\PixelCore\Model\Storage\SessionStorage</item>
            </argument>
        </arguments>
    </type>

    <type name="Amasty\PixelCore\Model\Event\Events\CategoryViewEvent">
        <arguments>
            <argument name="eventName" xsi:type="string">catalog_category_view</argument>
        </arguments>
    </type>
    <type name="Amasty\PixelCore\Model\Event\Events\ProductViewEvent">
        <arguments>
            <argument name="eventName" xsi:type="string">catalog_product_view</argument>
        </arguments>
    </type>
    <type name="Amasty\PixelCore\Model\Event\Events\CheckoutInitEvent">
        <arguments>
            <argument name="eventName" xsi:type="string">checkout_index_index</argument>
        </arguments>
    </type>
    <type name="Amasty\PixelCore\Model\Event\Events\SearchResultEvent">
        <arguments>
            <argument name="eventName" xsi:type="string">catalogsearch_result_index</argument>
        </arguments>
    </type>
    <type name="Amasty\PixelCore\Model\Event\Events\PurchaseEvent">
        <arguments>
            <argument name="eventName" xsi:type="string">purchase</argument>
        </arguments>
    </type>
    <virtualType name="Amasty\PixelCore\Model\Event\Events\AddToWishlistEvent"
                 type="Amasty\PixelCore\Model\Event\Events\CommonEvent">
        <arguments>
            <argument name="eventName" xsi:type="string">add_to_wishlist</argument>
        </arguments>
    </virtualType>
    <virtualType name="Amasty\PixelCore\Model\Event\Events\CustomerRegisterEvent"
                 type="Amasty\PixelCore\Model\Event\Events\CommonEvent">
        <arguments>
            <argument name="eventName" xsi:type="string">customer_register</argument>
        </arguments>
    </virtualType>
    <virtualType name="Amasty\PixelCore\Model\Event\Events\CustomerLoginEvent"
                 type="Amasty\PixelCore\Model\Event\Events\CommonEvent">
        <arguments>
            <argument name="eventName" xsi:type="string">customer_login</argument>
        </arguments>
    </virtualType>
    <virtualType name="Amasty\PixelCore\Model\Event\Events\ViewHomePageEvent"
                 type="Amasty\PixelCore\Model\Event\Events\CommonEvent">
        <arguments>
            <argument name="eventName" xsi:type="string">view_home_page</argument>
        </arguments>
    </virtualType>

    <type name="Amasty\PixelCore\Model\Event\EventsPool">
        <arguments>
            <argument name="events" xsi:type="array">
                <item name="catalog_category_view"
                      xsi:type="object">Amasty\PixelCore\Model\Event\Events\CategoryViewEvent</item>
                <item name="catalog_product_view"
                      xsi:type="object">Amasty\PixelCore\Model\Event\Events\ProductViewEvent</item>
                <item name="checkout_index_index"
                      xsi:type="object">Amasty\PixelCore\Model\Event\Events\CheckoutInitEvent</item>
                <item name="purchase" xsi:type="object">Amasty\PixelCore\Model\Event\Events\PurchaseEvent</item>
                <item name="catalogsearch_result_index"
                      xsi:type="object">Amasty\PixelCore\Model\Event\Events\SearchResultEvent</item>
                <item name="add_to_cart"
                      xsi:type="object">Amasty\PixelCore\Model\Event\Events\AddToCartEvent</item>
                <item name="add_to_wishlist"
                      xsi:type="object">Amasty\PixelCore\Model\Event\Events\AddToWishlistEvent</item>
                <item name="customer_register"
                      xsi:type="object">Amasty\PixelCore\Model\Event\Events\CustomerRegisterEvent</item>
                <item name="customer_login"
                      xsi:type="object">Amasty\PixelCore\Model\Event\Events\CustomerLoginEvent</item>
                <item name="view_home_page"
                      xsi:type="object">Amasty\PixelCore\Model\Event\Events\ViewHomePageEvent</item>
            </argument>
        </arguments>
    </type>

    <type name="Amasty\PixelCore\Model\Event\EventNameResolver">
        <arguments>
            <argument name="aliases" xsi:type="array">
                <item name="checkout_onepage_success" xsi:type="string">purchase</item>
                <item name="multishipping_checkout_success" xsi:type="string">purchase</item>
                <item name="cms_index_index" xsi:type="string">view_home_page</item>
                <item name="multishipping_checkout_addresses" xsi:type="string">checkout_index_index</item>
            </argument>
        </arguments>
    </type>

    <type name="Amasty\PixelCore\CustomerData\EventPool">
        <arguments>
            <argument name="storage" xsi:type="object">Amasty\PixelCore\Model\Storage\SessionStorage</argument>
        </arguments>
    </type>

    <type name="Magento\Customer\CustomerData\SectionPoolInterface">
        <arguments>
            <argument name="sectionSourceMap" xsi:type="array">
                <item name="ampixel-core-event-pool" xsi:type="string">Amasty\PixelCore\CustomerData\EventPool</item>
            </argument>
        </arguments>
    </type>

    <type name="Amasty\PixelCore\Observer\SetEventPoolCookie">
        <arguments>
            <argument name="sessionStorage" xsi:type="object">Amasty\PixelCore\Model\Storage\SessionStorage\Proxy</argument>
        </arguments>
    </type>
    <type name="Amasty\PixelCore\Model\Event\Events\AddToCartEvent">
        <arguments>
            <argument name="checkoutSession" xsi:type="object">Magento\Checkout\Model\Session\Proxy</argument>
        </arguments>
    </type>
    <type name="Magento\Wishlist\Controller\Index\Cart">
        <plugin name="Amasty_PixelCore::dispatchAddToCartEvent" type="Amasty\PixelCore\Plugin\Wishlist\Controller\Index\Cart\DispatchAddToCartEvent"/>
    </type>
</config>
