/**
 * @typedef {import('../lib/js-lib/slider.js').Slider} Slider
 * @typedef {import('../lib/js-lib/page-manager.js').PageManager} PageManager
 * @typedef {import('../lib/js-lib/ref-manager.js').RefManager} RefManager
 * 
 * @typedef {Object} SliderPageArg
 * @property {RefManager} slider_urls_manager - менеджер для слайдера
 * @property {RefManager} icon_refs_manager - менеджер иконок
 * @property {PageManager} page_manager - менеджер страниц
 * @property {Object} properties - свойства маркера
 */

/**
 * Инициализация slider-page
 * @function
 * @param {SliderPageArg} arg
 */
const slider_page_init = ({page_manager, icon_refs_manager, properties}) => {

    /** 
     * Инициализация кнопки возврата на info_page
     * @function
     */
    const to_info_page_init = (slider) => {
        const to_info_page = document.getElementById('to-info-page');

        // Иконка кнопки
        to_info_page.src = icon_refs_manager.get("map");

        to_info_page.onclick = () => {
            // Очистка
            slider.clear?.();

            page_manager.set_page('info-page', {
                page_manager,
                icon_refs_manager,
                properties
            });
        };
    };

    /** Безопасный вызов */
    recovery(
        () => {
            // Получение изображений из менеджера
            const images = properties.slider

            // Создание слайдера
            const slider = new Slider({
                slider: {
                    main: document.getElementById('slider'),
                    next: document.getElementById('next'),
                    previous: document.getElementById('previous')
                },
                next_ref: icon_refs_manager.get('next'),
                previous_ref: icon_refs_manager.get('previous'),
                images
            });

            // Кнопка назад к info_page
            to_info_page_init(slider);
        },
        (...e) => {
            console.log("Ошибка при инициализации (slider-page)");
            e.forEach(er => { throw er });
        }
    )();
};
