<?php
/**
 * Hyvä Themes - https://hyva.io
 * Copyright © Hyvä Themes. All rights reserved.
 * See COPYING.txt for license details.
 */

declare(strict_types=1);

use Hyva\Theme\Model\ViewModelRegistry;
use Hyva\Theme\ViewModel\HyvaCsp;
use Magento\Framework\Escaper;
use Magento\Framework\View\Element\Template;

/** @var Template $block */
/** @var Escaper $escaper */
/** @var HyvaCsp $hyvaCsp */
/** @var ViewModelRegistry $viewModels */
?>

<script>
    const viewTransitionToGalleryPageStorage = 'view-transition-to-gallery-page-type';
    const setTransitionNameBetweenGallery = async (url, promise) => {
        if (window.matchMedia('(prefers-reduced-motion)').matches) return;

        const productGallery = document.getElementById('gallery-main');
        const productListItem = document.querySelector(`.product-item-photo[href="${url}"]`);
        const targetElement = productListItem || productGallery;

        if (targetElement) {
            targetElement.style.viewTransitionName = 'view-transition-to-gallery';

            await promise;
            targetElement.style.viewTransitionName = '';
        }
    };

    const getViewTransitionToGalleryPageIsProduct = () => {
        return document.body.classList.contains('catalog-product-view') ? 'product-page' : 'other'
    }

    window.addEventListener('pageswap', async (e) => {
        if (!e.viewTransition) return;
        const pageType = getViewTransitionToGalleryPageIsProduct();
        const target = new URL(e.activation.entry.url);

        sessionStorage.setItem(viewTransitionToGalleryPageStorage, pageType);
        setTransitionNameBetweenGallery(target.href, e.viewTransition.finished);
    });

    window.addEventListener('pagereveal', async (e) => {
        if (!e.viewTransition || (window.navigation && !window.navigation.activation.from)) return;
        const previousPageType = sessionStorage.getItem(viewTransitionToGalleryPageStorage);
        const pageType = getViewTransitionToGalleryPageIsProduct();
        sessionStorage.removeItem(viewTransitionToGalleryPageStorage);

        if (previousPageType === pageType) return;
        const target = new URL(window.navigation.activation.from.url);
        setTransitionNameBetweenGallery(target.href, e.viewTransition.ready);
    });
</script>
<?php $hyvaCsp->registerInlineScript() ?>
