import { markRaw } from 'vue';
import { PrimeVueDialogSymbol } from 'primevue/usedialog';
import DynamicDialogEventBus from 'primevue/dynamicdialogeventbus';

export default {
    install: (app) => {
        const DialogService = {
            open: (content, options) => {
                const instance = {
                    content: content && markRaw(content),
                    options: options || {},
                    data: options && options.data,
                    close: (params) => {
                        DynamicDialogEventBus.emit('close', { instance, params });
                    }
                };

                DynamicDialogEventBus.emit('open', { instance });

                return instance;
            }
        };

        app.config.unwrapInjectedRef = true; // Remove it after Vue 3.3. Details: https://vuejs.org/guide/components/provide-inject.html#working-with-reactivity
        app.config.globalProperties.$dialog = DialogService;
        app.provide(PrimeVueDialogSymbol, DialogService);
    }
};
