import { DomHandler, UniqueComponentId } from 'primevue/utils';

const BadgeDirective = {
    mounted(el, options) {
        const id = UniqueComponentId() + '_badge';

        el.$_pbadgeId = id;

        let badge = document.createElement('span');

        badge.id = id;
        badge.className = 'p-badge p-component';

        for (let modifier in options.modifiers) {
            DomHandler.addClass(badge, 'p-badge-' + modifier);
        }

        if (options.value != null) {
            badge.appendChild(document.createTextNode(options.value));

            if (String(options.value).length === 1) {
                DomHandler.addClass(badge, 'p-badge-no-gutter');
            }
        } else {
            DomHandler.addClass(badge, 'p-badge-dot');
        }

        DomHandler.addClass(el, 'p-overlay-badge');
        el.appendChild(badge);
    },
    updated(el, options) {
        DomHandler.addClass(el, 'p-overlay-badge');

        if (options.oldValue !== options.value) {
            let badge = document.getElementById(el.$_pbadgeId);

            if (options.value) {
                if (DomHandler.hasClass(badge, 'p-badge-dot')) {
                    DomHandler.removeClass(badge, 'p-badge-dot');
                }

                if (String(options.value).length === 1) DomHandler.addClass(badge, 'p-badge-no-gutter');
                else DomHandler.removeClass(badge, 'p-badge-no-gutter');
            } else if (!options.value && !DomHandler.hasClass(badge, 'p-badge-dot')) {
                DomHandler.addClass(badge, 'p-badge-dot');
            }

            badge.innerHTML = '';
            badge.appendChild(document.createTextNode(options.value));
        }
    }
};

export default BadgeDirective;
