const oWelcomePopupDialogElem = $('#ibo-welcome-popup--dialog');

// Dialog is hidden by default to avoid a flash of unstyled content
oWelcomePopupDialogElem.removeClass('ibo-is-hidden');

// Prepare dialog
oWelcomePopupDialogElem.dialog({
	modal: true,
	width: $(window).innerWidth() * 0.7,
    maxHeight: $(window).innerHeight() * 0.8,
	autoOpen: true,
	title: oWelcomePopupDialogElem.attr('data-title'),
    open: function () {
        // Focus on acknowledge button
        const oAckButton = oWelcomePopupDialogElem.closest('[role="dialog"]').find('.ui-dialog-buttonset .ibo-is-primary').first();
        oAckButton.trigger('focus');

        // Count stack items and change button label to close if there is only one
        // Note: "<=" so it works when stack isn't displayed as well as when it contains only one item
        if (oWelcomePopupDialogElem.find('[data-role="ibo-welcome-popup--stack-item"]').length <= 1) {
            oAckButton.text({{ 'UI:WelcomePopup:Button:AcknowledgeAndClose'|dict_s|json_encode|raw }});
        }
    },
	close: function() {
        oWelcomePopupDialogElem.remove();
    },
    buttons: [
        {
            text: {{ 'UI:WelcomePopup:Button:RemindLater'|dict_s|json_encode|raw }},
            class: 'ibo-is-alternative',
            click: function() {
                oWelcomePopupDialogElem.dialog( "close" );
            }
        },
        {
            text: {{ 'UI:WelcomePopup:Button:AcknowledgeAndNext'|dict_s|json_encode|raw }},
            class: 'ibo-is-regular ibo-is-primary',
            click: function() {
                oWelcomePopupDialogElem.trigger('acknowledge_message.itop.welcome_popup');
            }
        }
    ]
 });

// Bind events
oWelcomePopupDialogElem
        // - On stack item click, display active message
        .on('click', '[data-role="ibo-welcome-popup--stack-item"]', function () {
            const sUUID = $(this).attr('data-uuid');
            const sUUIDEscapedForSelector = sUUID.replace(/\\/g, '\\\\');

            // Display active stack item
            oWelcomePopupDialogElem.find('[data-role="ibo-welcome-popup--stack-item"]').removeClass('ibo-is-active');
            oWelcomePopupDialogElem.find('[data-role="ibo-welcome-popup--stack-item"][data-uuid="' + sUUIDEscapedForSelector + '"]').addClass('ibo-is-active');

            // Display active content
            oWelcomePopupDialogElem.find('[data-role="ibo-welcome-popup--message-content"]').removeClass('ibo-is-active');
            oWelcomePopupDialogElem.find('[data-role="ibo-welcome-popup--message-content"][data-uuid="' + sUUIDEscapedForSelector + '"]').addClass('ibo-is-active');
        })
        .on('acknowledge_message.itop.welcome_popup', function (oEvent, oData) {
            const sUUID = oData?.uuid ?? oWelcomePopupDialogElem.find('.ibo-is-active[data-role="ibo-welcome-popup--message-content"]').attr('data-uuid');
            const sUUIDEscapedForSelector = sUUID.replace(/\\/g, '\\\\');

            // Acknowledge message on server
            $.post(
                '{{ sEndpointAbsURIForAcknowledgeMessage }}',
                {
                    message_uuid: sUUID
                },
                'json'
            )
            .done(function(oResponse) {
                if (oResponse.success) {
                    // Mark message as acknowledged
                    oWelcomePopupDialogElem.find('[data-role="ibo-welcome-popup--stack-item"][data-uuid="' + sUUIDEscapedForSelector + '"]').addClass('ibo-is-acknowledged');

                    // Display next message if any
                    const oNextStackItemElem = oWelcomePopupDialogElem.find('[data-role="ibo-welcome-popup--stack-item"]:not(.ibo-is-acknowledged)').first();
                    if (oNextStackItemElem.length > 0) {
                        oNextStackItemElem.trigger('click');

                        // Count non acknowledged stack items and change button label to close if there is only one
                        if (oWelcomePopupDialogElem.find('[data-role="ibo-welcome-popup--stack-item"]:not(.ibo-is-acknowledged)').length === 1) {
                            const oAckButton = oWelcomePopupDialogElem.closest('[role="dialog"]').find('.ui-dialog-buttonset .ibo-is-primary').first();
                            oAckButton.text({{ 'UI:WelcomePopup:Button:AcknowledgeAndClose'|dict_s|json_encode|raw }});
                        }
                    } else {
                        // Close dialog
                        oWelcomePopupDialogElem.dialog('close');
                    }
                } else {
                    // Display error message
                    CombodoModal.OpenErrorModal(oResponse.error_message);
                }
            })
            .fail(function(oXHR, sTextStatus, sErrorThrown) {
                // Display error message
                CombodoModal.OpenErrorModal(sErrorThrown);
            });
        });

// - Close the dialog when clicking outside of it
$('.ui-widget-overlay').on('click', function() { oWelcomePopupDialogElem.dialog('close'); } );



