(function () {
    'use strict';

    const primaryActions = new Set([
        /* Español */
        'RESERVAR',
        'CONTINUAR',
        'CONFIRMAR',

        /* Inglés */
        'BOOK NOW',
        'BOOK',
        'CONTINUE',
        'CONFIRM',

        /* Portugués */
        'RESERVAR',
        'CONTINUAR',
        'CONFIRMAR',

        /* Francés */
        'RÉSERVER',
        'CONTINUER',
        'CONFIRMER',

        /* Alemán */
        'BUCHEN',
        'WEITER',
        'BESTÄTIGEN'
    ]);

    const secondaryActions = new Set([
        'SEGUIR COMPRANDO',
        'CONTINUE SHOPPING',
        'CONTINUAR COMPRANDO',
        'CONTINUER MES ACHATS',
        'WEITER EINKAUFEN'
    ]);

    const controlActions = new Set([
        '+',
        '-',
        '−'
    ]);

    function cleanText(value) {
        return (value || '')
            .replace(/\s+/g, ' ')
            .trim()
            .toUpperCase();
    }

    function getControlText(element) {
        if (
            element.tagName === 'INPUT' &&
            (
                element.type === 'submit' ||
                element.type === 'button'
            )
        ) {
            return cleanText(element.value);
        }

        return cleanText(element.textContent);
    }

    function stylePeaklineButtons() {

        const controls = document.querySelectorAll(
            'button, input[type="submit"], input[type="button"], a[role="button"]'
        );

        controls.forEach(function (element) {

            const text = getControlText(element);

            /* Limpiamos únicamente nuestras clases */
            element.classList.remove(
                'pk-action-primary',
                'pk-action-secondary',
                'pk-action-control'
            );

            if (controlActions.has(text)) {
                element.classList.add('pk-action-control');
                return;
            }

            if (primaryActions.has(text)) {
                element.classList.add('pk-action-primary');
                return;
            }

            if (secondaryActions.has(text)) {
                element.classList.add('pk-action-secondary');
            }
        });
    }

    let scheduled = false;

    function scheduleUpdate() {
        if (scheduled) return;

        scheduled = true;

        requestAnimationFrame(function () {
            scheduled = false;
            stylePeaklineButtons();
        });
    }

    if (document.readyState === 'loading') {
        document.addEventListener(
            'DOMContentLoaded',
            stylePeaklineButtons
        );
    } else {
        stylePeaklineButtons();
    }

    const observer = new MutationObserver(scheduleUpdate);

    observer.observe(document.body, {
        childList: true,
        subtree: true
    });

})();