"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.banner = void 0;
const react_1 = require("react");
const Notification_1 = require("../Notification");
const BannerTemplate_1 = require("./BannerTemplate");
const constants_1 = require("./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 = Notification_1.notify.custom(({ toastProps }) => {
                    const { key, ...restToastProps } = toastProps;
                    return ((0, react_1.createElement)(BannerTemplate_1.BannerTemplate, { ...options, ...restToastProps, onClose: options?.onClose, key: key }));
                }, {
                    containerId: options.containerId || Notification_1.BANNER_CONTAINER_ID,
                    hideProgressBar: true,
                    autoClose: false,
                    className: constants_1.bannerClassnames.root,
                });
            },
            /**
             * Метод закрытия баннера
             * @example
             * createBanner.close()
             */
            close: () => {
                if (bannerId) {
                    Notification_1.notify.dismiss(bannerId);
                }
            },
        };
    }
}
exports.banner = new Banner();
