(function($) {
    'use strict';

    var autoClickPairs = [];

    function initAutoClick() {
        autoClickPairs = didakAutoClickData.pairs || [];
        setupEventListeners();
    }

    function setupEventListeners() {
        $(document).on('click', function(event) {
            autoClickPairs.forEach(function(pair) {
                if ($(event.target).is(pair.first)) {
                    handleAutoClickActions(pair, 'first_actions');
                    handleAutoClickActions(pair, 'second_actions');
                }
            });
        });

        $('.didak-auto-click-button').on('click', function() {
            var pairData = JSON.parse($(this).data('pair'));
            handleAutoClickActions(pairData, 'first_actions');
            handleAutoClickActions(pairData, 'second_actions');
        });
    }

    function handleAutoClickActions(pair, actionType) {
        var selector = actionType === 'first_actions' ? pair.first : pair.second;

        if (actionType === 'second_actions' && pair.increment_last_digits) {
            selector = incrementLastDigits(selector);
        }

        pair[actionType].forEach(function(action) {
            setTimeout(function() {
                if (action.action.startsWith('INSERT_TO_CART:')) {
                    var versionId = action.action.split(':')[1];
                    insertToCart(versionId);
                } else {
                    performAction($(selector)[0], action.action);
                }
            }, action.delay);
        });
    }

    function incrementLastDigits(selector) {
        return selector.replace(/(\d+)(?!.*\d)/, function(match) {
            return parseInt(match, 10) + 1;
        });
    }

    function performAction(element, action) {
        switch (action) {
            case 'click':
                element.click();
                break;
            case 'paste':
                pasteText(element);
                break;
            case 'copy':
                copyText(element);
                break;
            case 'cut':
                cutText(element);
                break;
            case 'selectAll':
                selectAllText(element);
                break;
        }
    }

    function insertToCart(versionId) {
        var textToInsert = getTextToInsert();
        if (!textToInsert) {
            console.error('Ingen tekst at indsætte i kurven');
            return;
        }

        if (window['tekst_formatering_tf_' + versionId] && 
            typeof window['tekst_formatering_tf_' + versionId].addToCart === 'function') {
            window['tekst_formatering_tf_' + versionId].addToCart(textToInsert);
            console.log('Tekst tilføjet til kurv:', versionId);
            $(document).trigger('didakAutoClickCartUpdated', [versionId]);
        } else {
            console.error('Kunne ikke finde addToCart funktion for version:', versionId);
        }
    }

    function getTextToInsert() {
        var selectedText = window.getSelection().toString();
        if (selectedText) {
            return selectedText;
        }

        var activeElement = document.activeElement;
        if (activeElement && (activeElement.tagName === 'INPUT' || activeElement.tagName === 'TEXTAREA')) {
            return activeElement.value.substring(activeElement.selectionStart, activeElement.selectionEnd);
        }

        return getClipboardText();
    }

    function getClipboardText() {
        return new Promise((resolve) => {
            navigator.clipboard.readText()
                .then(text => resolve(text))
                .catch(() => resolve(''));
        });
    }

    function pasteText(element) {
        navigator.clipboard.readText().then(text => {
            if (element.tagName === 'INPUT' || element.tagName === 'TEXTAREA') {
                element.value = text;
            } else {
                element.textContent = text;
            }
        });
    }

    function copyText(element) {
        var text = element.value || element.textContent;
        navigator.clipboard.writeText(text);
    }

    function cutText(element) {
        copyText(element);
        if (element.value !== undefined) {
            element.value = '';
        } else {
            element.textContent = '';
        }
    }

    function selectAllText(element) {
        if (element.select) {
            element.select();
        } else {
            var range = document.createRange();
            range.selectNodeContents(element);
            var selection = window.getSelection();
            selection.removeAllRanges();
            selection.addRange(range);
        }
    }

    $(document).ready(initAutoClick);

})(jQuery);