(() => {
    'use strict';

    const processImageShapes = (currentDocument = document, isProcessOnLoad = false) => {
        const wrapperElements = currentDocument?.querySelectorAll('.sppb-addon-image-shape');
        
        wrapperElements.forEach((wrapperElement) => {
            const path = wrapperElement.querySelector('svg path');
            const image = wrapperElement.querySelector('img');
            
            if (!image || !path) {
                return;
            }

            const updateSVGStyle = (image) => {
                const dataScale = image.getAttribute('data-scale') || 1;
                const bbox = path.getBBox();
                const centerX = bbox.x + bbox.width / 2;
                const centerY = bbox.y + bbox.height / 2;
                const translateX = image.width / 2;
                const translateY = image.height / 2;
                path.setAttribute('transform', 'translate(' + translateX + ',' + translateY + ') scale(' + dataScale + ') translate(' + (-centerX) + ',' + (-centerY) + ')');
                image.style.visibility = null;
            }
            
            if (isProcessOnLoad) {
                image.onload = () => {
                    updateSVGStyle(image);
                }

                return;
            }
            
            updateSVGStyle(image);
        })
    }

    document.addEventListener('DOMContentLoaded', function () {
        processImageShapes(document, false);
        
        document.getElementById('sp-pagebuilder-view')?.addEventListener('load', () => {
            const pageBuilderIframe = window.frames['sp-pagebuilder-view'];

            if (!pageBuilderIframe) {
                return;
            }

            const container = pageBuilderIframe?.window.document.getElementById('sp-pagebuilder-container');
            if (container) {
                processImageShapes(container, true);

                const config = { attributes: true, childList: true, subtree: true };
                const observer = new MutationObserver(function (mutations) {
                    mutations.forEach(function (mutation) {                            
                        if (mutation.type === 'childList' || mutation.type === 'subtree') {
                            if (mutation.target === container || container.contains(mutation.target)) {
                                processImageShapes(container, true);
                            }
                        }
                    });
                });

                observer.observe(container, config);
            }
        })
    });
})();