import { createElement as _createElement } from "react";
import { BANNER_CONTAINER_ID, notify } from '../Notification';
import { BannerTemplate } from './BannerTemplate';
import { bannerClassnames } from './constants';
/**
 * Сервис для отображения рекламного баннера или опроса
 * Для работы, необходим react >= 18
 * @example
 * const createBanner = banner.create({
 *     title: 'Установите расширение Доки для 1С',
 *     description: 'Баннер с заголовком',
 *   });
 *
 *   useEffect(() => {
 *     createBanner.open();
 *   }, []);
 *
 *   const handleCloseBanner = () => {
 *     createBanner.close();
 *   };
 */
class Banner {
    constructor() {
        this.isMobile = false;
        this.isInitialized = false;
    }
    _init(isMobile, setIsOpenModal) {
        this.isMobile = isMobile;
        this.setIsOpenModal = setIsOpenModal;
        this.isInitialized = true;
    }
    /**
     * Метод возвращает объект баннера
     * @example
     * const createBanner = banner.create({
     *     title: 'Установите расширение Доки для 1С',
     *     description: 'Баннер с заголовком',
     *   });
     */
    create(options) {
        let bannerId = undefined;
        this._options = options;
        return {
            /**
             * Метод открытия баннера
             * @example
             * createBanner.open()
             */
            open: () => {
                if (!this.isInitialized) {
                    // biome-ignore lint/suspicious/noConsole: Ошибка для интеграторов
                    console.error('BannerContainer отсутствует');
                }
                if (bannerId) {
                    // biome-ignore lint/suspicious/noConsole: Ошибка для интеграторов
                    return console.warn(`Баннер с идентификатором ${bannerId} уже открыт.`);
                }
                if (this.isMobile && this.setIsOpenModal) {
                    this.setIsOpenModal(true);
                    return;
                }
                bannerId = notify.custom(({ toastProps }) => {
                    const { key, ...restToastProps } = toastProps;
                    return (_createElement(BannerTemplate, { ...options, ...restToastProps, onClose: options?.onClose, key: key }));
                }, {
                    containerId: options.containerId || BANNER_CONTAINER_ID,
                    hideProgressBar: true,
                    autoClose: false,
                    className: bannerClassnames.root,
                });
            },
            /**
             * Метод закрытия баннера
             * @example
             * createBanner.close()
             */
            close: () => {
                if (bannerId) {
                    notify.dismiss(bannerId);
                }
            },
        };
    }
}
export const banner = new Banner();
