<?xml version="1.0"?>
<!--
/**
 * @author Amasty Team
 * @copyright Copyright (c) Amasty (https://www.amasty.com)
 * @package TikTok Pixel by Amasty
 */-->

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
    <type name="Amasty\PixelCore\Model\Storage\StorageResolver">
        <arguments>
            <argument name="storagePool" xsi:type="array">
                <item name="tiktok_server" xsi:type="object">Amasty\PixelTikTok\Model\Storage\ServerStorage</item>
            </argument>
        </arguments>
    </type>

    <virtualType name="Amasty\PixelTikTok\Model\Event\Events\NewsletterSubscribeEvent"
                 type="Amasty\PixelCore\Model\Event\Events\CommonEvent">
        <arguments>
            <argument name="eventName" xsi:type="string">tiktok_newsletter_subscribe</argument>
        </arguments>
    </virtualType>

    <type name="Amasty\PixelCore\Model\Event\EventsPool">
        <arguments>
            <argument name="events" xsi:type="array">
                <item name="tiktok_newsletter_subscribe"
                      xsi:type="object">Amasty\PixelTikTok\Model\Event\Events\NewsletterSubscribeEvent</item>
                <item name="tiktok_add_payment_info"
                      xsi:type="object">Amasty\PixelTikTok\Model\Event\Events\AddPaymentInfo</item>
            </argument>
        </arguments>
    </type>

    <type name="Amasty\PixelTikTok\Controller\Track\EventApi">
        <arguments>
            <argument name="storage" xsi:type="object">Amasty\PixelTikTok\Model\Storage\ServerStorage</argument>
        </arguments>
    </type>

    <type name="Amasty\PixelTikTok\Model\Api\Builder\Composite">
        <arguments>
            <argument name="builders" xsi:type="array">
                <item name="event" sortOrder="10" xsi:type="object">Amasty\PixelTikTok\Model\Api\Builder\Event</item>
                <item name="user" sortOrder="20" xsi:type="object">Amasty\PixelTikTok\Model\Api\Builder\User</item>
                <item name="page" sortOrder="30" xsi:type="object">Amasty\PixelTikTok\Model\Api\Builder\Page</item>
                <item name="cleaner" sortOrder="40" xsi:type="object">Amasty\PixelTikTok\Model\Api\Builder\Cleaner</item>
            </argument>
        </arguments>
    </type>
    <type name="Amasty\PixelTikTok\Model\Api\ApiEventDataFactory">
        <arguments>
            <argument name="paramsBuilder" xsi:type="object">Amasty\PixelTikTok\Model\Api\Builder\Composite</argument>
        </arguments>
    </type>

    <!-- Collectors Configuration Start -->
    <!-- Catalog Collectors -->
    <virtualType name="Amasty\PixelTikTok\Model\Collector\Catalog\ApiProductViewContentCollector"
                 type="Amasty\PixelTikTok\Model\Collector\Catalog\ProductViewContentCollector">
        <arguments>
            <argument name="configEventName" xsi:type="string">api.view_product</argument>
        </arguments>
    </virtualType>
    <virtualType name="Amasty\PixelTikTok\Model\Collector\Catalog\ApiCategoryViewContentCollector"
                 type="Amasty\PixelTikTok\Model\Collector\Catalog\CategoryViewContentCollector">
        <arguments>
            <argument name="configEventName" xsi:type="string">api.view_category</argument>
        </arguments>
    </virtualType>
    <virtualType name="Amasty\PixelTikTok\Model\Collector\Catalog\ApiSearchProductCollector"
                 type="Amasty\PixelTikTok\Model\Collector\Catalog\SearchCollector">
        <arguments>
            <argument name="configEventName" xsi:type="string">api.search_product</argument>
        </arguments>
    </virtualType>
    <virtualType name="Amasty\PixelTikTok\Model\Collector\Catalog\ApiAddToWishlistCollector"
                 type="Amasty\PixelTikTok\Model\Collector\Catalog\AddToWishlistCollector">
        <arguments>
            <argument name="configEventName" xsi:type="string">api.add_to_wishlist</argument>
        </arguments>
    </virtualType>

    <!-- Checkout Collectors -->
    <virtualType name="Amasty\PixelTikTok\Model\Collector\Checkout\ApiAddToCartCollector"
                 type="Amasty\PixelTikTok\Model\Collector\Checkout\AddToCartCollector">
        <arguments>
            <argument name="configEventName" xsi:type="string">api.add_to_cart</argument>
        </arguments>
    </virtualType>
    <virtualType name="Amasty\PixelTikTok\Model\Collector\Checkout\ApiInitiateCheckoutCollector"
                 type="Amasty\PixelTikTok\Model\Collector\Checkout\InitiateCheckoutCollector">
        <arguments>
            <argument name="configEventName" xsi:type="string">api.initiate_checkout</argument>
        </arguments>
    </virtualType>
    <virtualType name="Amasty\PixelTikTok\Model\Collector\Checkout\ApiPlaceAnOrderCollector"
                 type="Amasty\PixelTikTok\Model\Collector\Checkout\PlaceAnOrderCollector">
        <arguments>
            <argument name="configEventName" xsi:type="string">api.place_order</argument>
        </arguments>
    </virtualType>
    <virtualType name="Amasty\PixelTikTok\Model\Collector\Checkout\ApiAddPaymentInfoCollector"
                 type="Amasty\PixelTikTok\Model\Collector\Checkout\AddPaymentInfoCollector">
        <arguments>
            <argument name="configEventName" xsi:type="string">api.add_payment_info</argument>
        </arguments>
    </virtualType>

    <!-- Customer Collectors -->
    <virtualType name="Amasty\PixelTikTok\Model\Collector\Customer\ApiSubscribeCollector"
                 type="Amasty\PixelTikTok\Model\Collector\Customer\SubscribeCollector">
        <arguments>
            <argument name="configEventName" xsi:type="string">api.newsletter_subscribe</argument>
        </arguments>
    </virtualType>
    <virtualType name="Amasty\PixelTikTok\Model\Collector\Customer\ApiCompleteRegistrationCollector"
                 type="Amasty\PixelTikTok\Model\Collector\Customer\CompleteRegistrationCollector">
        <arguments>
            <argument name="configEventName" xsi:type="string">api.complete_registration</argument>
        </arguments>
    </virtualType>

    <!-- CollectorConfig declaration -->
    <virtualType name="TikTokPixelViewItemCollector" type="Amasty\PixelCore\Model\Collector\Config\CollectorConfig">
        <arguments>
            <argument name="collectorClass" xsi:type="string">Amasty\PixelTikTok\Model\Collector\Catalog\ProductViewContentCollector</argument>
            <argument name="storageType" xsi:type="string">local</argument>
        </arguments>
    </virtualType>
    <virtualType name="TikTokApiViewItemCollector" type="Amasty\PixelCore\Model\Collector\Config\CollectorConfig">
        <arguments>
            <argument name="collectorClass" xsi:type="string">Amasty\PixelTikTok\Model\Collector\Catalog\ApiProductViewContentCollector</argument>
            <argument name="storageType" xsi:type="string">local</argument>
        </arguments>
    </virtualType>
    <virtualType name="TikTokPixelViewCategoryCollector" type="Amasty\PixelCore\Model\Collector\Config\CollectorConfig">
        <arguments>
            <argument name="collectorClass" xsi:type="string">Amasty\PixelTikTok\Model\Collector\Catalog\CategoryViewContentCollector</argument>
            <argument name="storageType" xsi:type="string">local</argument>
        </arguments>
    </virtualType>
    <virtualType name="TikTokApiViewCategoryCollector" type="Amasty\PixelCore\Model\Collector\Config\CollectorConfig">
        <arguments>
            <argument name="collectorClass" xsi:type="string">Amasty\PixelTikTok\Model\Collector\Catalog\ApiCategoryViewContentCollector</argument>
            <argument name="storageType" xsi:type="string">local</argument>
        </arguments>
    </virtualType>
    <virtualType name="TikTokPixelSearchProductCollector" type="Amasty\PixelCore\Model\Collector\Config\CollectorConfig">
        <arguments>
            <argument name="collectorClass" xsi:type="string">Amasty\PixelTikTok\Model\Collector\Catalog\SearchCollector</argument>
            <argument name="storageType" xsi:type="string">local</argument>
        </arguments>
    </virtualType>
    <virtualType name="TikTokApiSearchProductCollector" type="Amasty\PixelCore\Model\Collector\Config\CollectorConfig">
        <arguments>
            <argument name="collectorClass" xsi:type="string">Amasty\PixelTikTok\Model\Collector\Catalog\ApiSearchProductCollector</argument>
            <argument name="storageType" xsi:type="string">tiktok_server</argument>
        </arguments>
    </virtualType>
    <virtualType name="TikTokPixelAddToWishlistCollector" type="Amasty\PixelCore\Model\Collector\Config\CollectorConfig">
        <arguments>
            <argument name="collectorClass" xsi:type="string">Amasty\PixelTikTok\Model\Collector\Catalog\AddToWishlistCollector</argument>
            <argument name="storageType" xsi:type="string">session</argument>
        </arguments>
    </virtualType>
    <virtualType name="TikTokApiAddToWishlistCollector" type="Amasty\PixelCore\Model\Collector\Config\CollectorConfig">
        <arguments>
            <argument name="collectorClass" xsi:type="string">Amasty\PixelTikTok\Model\Collector\Catalog\ApiAddToWishlistCollector</argument>
            <argument name="storageType" xsi:type="string">tiktok_server</argument>
        </arguments>
    </virtualType>
    <virtualType name="TikTokPixelAddToCartCollector" type="Amasty\PixelCore\Model\Collector\Config\CollectorConfig">
        <arguments>
            <argument name="collectorClass" xsi:type="string">Amasty\PixelTikTok\Model\Collector\Checkout\AddToCartCollector</argument>
            <argument name="storageType" xsi:type="string">session</argument>
        </arguments>
    </virtualType>
    <virtualType name="TikTokApiAddToCartCollector" type="Amasty\PixelCore\Model\Collector\Config\CollectorConfig">
        <arguments>
            <argument name="collectorClass" xsi:type="string">Amasty\PixelTikTok\Model\Collector\Checkout\ApiAddToCartCollector</argument>
            <argument name="storageType" xsi:type="string">tiktok_server</argument>
        </arguments>
    </virtualType>
    <virtualType name="TikTokPixelInitiateCheckoutCollector" type="Amasty\PixelCore\Model\Collector\Config\CollectorConfig">
        <arguments>
            <argument name="collectorClass" xsi:type="string">Amasty\PixelTikTok\Model\Collector\Checkout\InitiateCheckoutCollector</argument>
            <argument name="storageType" xsi:type="string">local</argument>
        </arguments>
    </virtualType>
    <virtualType name="TikTokApiInitiateCheckoutCollector" type="Amasty\PixelCore\Model\Collector\Config\CollectorConfig">
        <arguments>
            <argument name="collectorClass" xsi:type="string">Amasty\PixelTikTok\Model\Collector\Checkout\ApiInitiateCheckoutCollector</argument>
            <argument name="storageType" xsi:type="string">tiktok_server</argument>
        </arguments>
    </virtualType>
    <virtualType name="TikTokPixelAddPaymentInfoCollector" type="Amasty\PixelCore\Model\Collector\Config\CollectorConfig">
        <arguments>
            <argument name="collectorClass" xsi:type="string">Amasty\PixelTikTok\Model\Collector\Checkout\AddPaymentInfoCollector</argument>
            <argument name="storageType" xsi:type="string">session</argument>
        </arguments>
    </virtualType>
    <virtualType name="TikTokApiAddPaymentInfoCollector" type="Amasty\PixelCore\Model\Collector\Config\CollectorConfig">
        <arguments>
            <argument name="collectorClass" xsi:type="string">Amasty\PixelTikTok\Model\Collector\Checkout\ApiAddPaymentInfoCollector</argument>
            <argument name="storageType" xsi:type="string">tiktok_server</argument>
        </arguments>
    </virtualType>
    <virtualType name="TikTokPixelPlaceAnOrderCollector" type="Amasty\PixelCore\Model\Collector\Config\CollectorConfig">
        <arguments>
            <argument name="collectorClass" xsi:type="string">Amasty\PixelTikTok\Model\Collector\Checkout\PlaceAnOrderCollector</argument>
            <argument name="storageType" xsi:type="string">local</argument>
        </arguments>
    </virtualType>
    <virtualType name="TikTokApiPlaceAnOrderCollector" type="Amasty\PixelCore\Model\Collector\Config\CollectorConfig">
        <arguments>
            <argument name="collectorClass" xsi:type="string">Amasty\PixelTikTok\Model\Collector\Checkout\ApiPlaceAnOrderCollector</argument>
            <argument name="storageType" xsi:type="string">tiktok_server</argument>
        </arguments>
    </virtualType>
    <virtualType name="TikTokPixelSubscribeCollector" type="Amasty\PixelCore\Model\Collector\Config\CollectorConfig">
        <arguments>
            <argument name="collectorClass" xsi:type="string">Amasty\PixelTikTok\Model\Collector\Customer\SubscribeCollector</argument>
            <argument name="storageType" xsi:type="string">session</argument>
        </arguments>
    </virtualType>
    <virtualType name="TikTokApiSubscribeCollector" type="Amasty\PixelCore\Model\Collector\Config\CollectorConfig">
        <arguments>
            <argument name="collectorClass" xsi:type="string">Amasty\PixelTikTok\Model\Collector\Customer\ApiSubscribeCollector</argument>
            <argument name="storageType" xsi:type="string">tiktok_server</argument>
        </arguments>
    </virtualType>
    <virtualType name="TikTokPixelCompleteRegistrationCollector" type="Amasty\PixelCore\Model\Collector\Config\CollectorConfig">
        <arguments>
            <argument name="collectorClass" xsi:type="string">Amasty\PixelTikTok\Model\Collector\Customer\CompleteRegistrationCollector</argument>
            <argument name="storageType" xsi:type="string">session</argument>
        </arguments>
    </virtualType>
    <virtualType name="TikTokApiCompleteRegistrationCollector" type="Amasty\PixelCore\Model\Collector\Config\CollectorConfig">
        <arguments>
            <argument name="collectorClass" xsi:type="string">Amasty\PixelTikTok\Model\Collector\Customer\ApiCompleteRegistrationCollector</argument>
            <argument name="storageType" xsi:type="string">tiktok_server</argument>
        </arguments>
    </virtualType>

    <type name="Amasty\PixelCore\Model\Collector\CollectorsConfigPool">
        <arguments>
            <argument name="collectorsConfig" xsi:type="array">
                <item name="catalog_product_view" xsi:type="array">
                    <item name="tiktok_pixel_view_item" xsi:type="object">TikTokPixelViewItemCollector</item>
                    <item name="tiktok_api_view_item" xsi:type="object">TikTokApiViewItemCollector</item>
                </item>
                <item name="catalog_category_view" xsi:type="array">
                    <item name="tiktok_pixel_view_category" xsi:type="object">TikTokPixelViewCategoryCollector</item>
                    <item name="tiktok_api_view_category" xsi:type="object">TikTokApiViewCategoryCollector</item>
                </item>
                <item name="catalogsearch_result_index" xsi:type="array">
                    <item name="tiktok_pixel_search_product" xsi:type="object">TikTokPixelSearchProductCollector</item>
                    <item name="tiktok_api_search_product" xsi:type="object">TikTokApiSearchProductCollector</item>
                </item>
                <item name="add_to_wishlist" xsi:type="array">
                    <item name="tiktok_pixel_add_to_wishlist" xsi:type="object">TikTokPixelAddToWishlistCollector</item>
                    <item name="tiktok_api_add_to_wishlist" xsi:type="object">TikTokApiAddToWishlistCollector</item>
                </item>
                <item name="add_to_cart" xsi:type="array">
                    <item name="tiktok_pixel_add_to_cart" xsi:type="object">TikTokPixelAddToCartCollector</item>
                    <item name="tiktok_api_add_to_cart" xsi:type="object">TikTokApiAddToCartCollector</item>
                </item>
                <item name="checkout_index_index" xsi:type="array">
                    <item name="tiktok_pixel_initiate_checkout" xsi:type="object">TikTokPixelInitiateCheckoutCollector</item>
                    <item name="tiktok_api_initiate_checkout" xsi:type="object">TikTokApiInitiateCheckoutCollector</item>
                </item>
                <item name="tiktok_add_payment_info" xsi:type="array">
                    <item name="tiktok_pixel_add_payment_info" xsi:type="object">TikTokPixelAddPaymentInfoCollector</item>
                    <item name="tiktok_api_add_payment_info" xsi:type="object">TikTokApiAddPaymentInfoCollector</item>
                </item>
                <item name="purchase" xsi:type="array">
                    <item name="tiktok_pixel_place_an_order" xsi:type="object">TikTokPixelPlaceAnOrderCollector</item>
                    <item name="tiktok_api_place_an_order" xsi:type="object">TikTokApiPlaceAnOrderCollector</item>
                </item>
                <item name="customer_register" xsi:type="array">
                    <item name="tiktok_pixel_registration_complete" xsi:type="object">TikTokPixelCompleteRegistrationCollector</item>
                    <item name="tiktok_api_registration_complete" xsi:type="object">TikTokApiCompleteRegistrationCollector</item>
                </item>
                <item name="tiktok_newsletter_subscribe" xsi:type="array">
                    <item name="tiktok_pixel_newsletter_subscribe" xsi:type="object">TikTokPixelSubscribeCollector</item>
                    <item name="tiktok_api_newsletter_subscribe" xsi:type="object">TikTokApiSubscribeCollector</item>
                </item>
            </argument>
        </arguments>
    </type>
    <!-- Collectors Configuration End -->

    <type name="Magento\Framework\App\PageCache\Identifier">
        <plugin name="Amasty_PixelTikTok::removeTtclid" type="Amasty\PixelTikTok\Plugin\Framework\App\PageCache\Identifier\RemoveTtclid"/>
    </type>

    <type name="Magento\Newsletter\Model\SubscriptionManagerInterface">
        <plugin name="Amasty_PixelTikTok::dispatchNewsletterSubscription"
                type="Amasty\PixelTikTok\Plugin\Newsletter\Model\SubscriptionManagerInterface\DispatchNewsletterSubscription"/>
    </type>

    <type name="Amasty\CheckoutCore\Model\Quote\CheckoutInitialization">
        <plugin name="Amasty_PixelTikTok::dispatchAddPaymentInfoEvent"
                type="Amasty\PixelTikTok\Plugin\CheckoutCore\Model\Quote\CheckoutInitialization\DispatchAddPaymentInfoEvent"/>
    </type>
    <type name="Magento\Quote\Model\Quote\Payment">
        <plugin name="Amasty_PixelTikTok::dispatchAddPaymentInfoEvent"
                type="Amasty\PixelTikTok\Plugin\Quote\Model\Quote\Payment\DispatchAddPaymentInfoEvent"/>
    </type>
</config>
