<template>
    <div
        class="funnel-header d-flex justify-content-center align-items-center flex-column"
        v-if="imageSrc">
        <img class="logo-image img-fluid" :src="imageSrc" alt="Safelite logo" />
        <menuModal />
    </div>
    <template v-for="globalAlert in globalAlertMessages" :key="globalAlert.id">
        <transition name="fade" mode="out-in">
            <alert
                v-if="globalAlert.displayAlert"
                class="rounded-0 w-100 border-0 shadow-sm"
                cmsWidgetName="GlobalAlert"
                :manualHeadline="globalAlert.messageHeadline"
                :manualCopy="globalAlert.messageCopy"
                :alertClass="globalAlert.type"
                v-bind:isDismissible="globalAlert.isDismissible" />
        </transition>
    </template>
</template>

<script>
import alert from "@/ux-components/alert/alert";
import eventBus from "@/helpers/event-bus/event-bus";
import { globalEvents } from "@/constants/events";
import menuModal from "@/fmg-components/funnel-header/menu-modal/menu-modal";

// Constants
const ALERT_DURATION = 3000; // millisecond time to display alert before dismissal

export default {
    name: "funnel-header",
    data() {
        return {
            alertIdCounter: 0,
            globalAlertMessages: [],
        };
    },
    props: {
        cmsWidgetName: String,
    },
    computed: {
        imageSrc() {
            return this.getCmsContent(this.cmsWidgetName, "LogoImage");
        },
    },
    methods: {
        pushGlobalAlert(alertToPush, isAutoDismissing) {
            alertToPush.displayAlert = true;
            alertToPush.id = this.alertIdCounter;
            this.alertIdCounter++;
            if (isAutoDismissing) {
                setTimeout(() => {
                    alertToPush.displayAlert = false;
                    // force a re-evaluation of the globalAlertMessages to detect the v-if change
                    this.globalAlertMessages = this.globalAlertMessages.splice(0);
                }, ALERT_DURATION);
            }
            this.globalAlertMessages.push(alertToPush);
        },
    },
    components: {
        alert,
        menuModal,
    },
    mounted() {
        // Check if alert event is on the bus
        const alertEvent = eventBus.readAndPopEventFromBus(
            globalEvents.Categories.GLOBAL_ALERT,
            globalEvents.SubCategories.PAGE_NOT_FOUND
        );
        // If alert event is on the bus, then display the alert
        if (alertEvent !== undefined) {
            alertEvent.displayAlert = true;
            this.globalAlertMessages.push(alertEvent);
        }
    },
};
</script>

<style lang="scss" scoped>
.funnel-header {
    position: relative;
    padding: 0.97rem 0;
}

.logo-image {
    max-width: 78px;
}
</style>
