const get_azi_events = async function (json = true) {
	return await fetch('https://az-50.ru/calendar/events.php', {
		method: 'GET',
		mode  : 'cors'
	}).then(response => json ? response.json() : response.text())
	  .catch(err => console.log(err));
};

const azi_events = get_azi_events();

window.addEventListener('DOMContentLoaded', function () {
	azi_events.then(function (events) {
		const months        = ['января', 'февраля', 'марта', 'апреля', 'мая', 'июня', 'июля', 'августа', 'сентября', 'октября', 'ноября', 'декабря'];
        
    const calendar_list = document.querySelector('.dn-calendar');
    
    if(calendar_list !== null) {
		calendar_list.insertAdjacentHTML('afterbegin', '<ul class="events-list coming_events d-none"></ul><ul class="events-list prev_events d-none"></ul>');
    }
    
    const coming_events = document.querySelector('.coming_events'),
		  prev_events   = document.querySelector('.prev_events');
        
		for (let event in events) {
			const current_date      = new Date(),
			      current_zero_date = new Date(current_date.getFullYear(), current_date.getMonth(), current_date.getDate(), 0, 0, 0),
			      date              = new Date(event.replace(/-/g, "/")),
			      day               = date.getDate(),
			      month             = date.getMonth(),
			      year              = date.getFullYear(),
			      ev                = events[event],
			      target            = date >= current_zero_date ? coming_events : prev_events;

			let tpl = '<li>';
			tpl += '<header class="event-header"><div class="event-date">' + day + ' ' + months[month] + '</div></header>';
			tpl += '<div class="content">';
			tpl += '<div class="event-desc">';

			if (typeof ev.events !== 'undefined') {
				for (let i = 0; i < ev.events.length; i++) {
					const sub_event = ev.events[i];

					tpl += i > 0 ? '<hr>' + sub_event.desc : sub_event.desc;
					if (sub_event.link !== '') {
						tpl += '<a href="' + sub_event.link + '" class="event-link" target="_blank">Подробнее</a>';
					}
				}
			} else {
				tpl += ev.desc;
				if (ev.link !== '') {
					tpl += '<a href="' + ev.link + '" class="event-link" target="_blank">Подробнее</a>';
				}
			}
			tpl += '</div></div>';

			tpl += '</li>';

            if(target !== null) {
				target.insertAdjacentHTML('afterbegin', tpl);
            }
		}
		if(calendar_list !== null) {
            calendar_list.querySelectorAll('.d-none').forEach(function (elem) {
                elem.classList.remove('d-none');
            });
        }
	});
});


(function ($) {

	$(function () {
		if ($('#datepicker').length) {
			azi_events.then(function (events) {
				$.fn.datepicker.dates['ru'] = {
					days       : ["Воскресенье", "Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота"],
					daysShort  : ["Вск", "Пнд", "Втр", "Срд", "Чтв", "Птн", "Суб"],
					daysMin    : ["Вс", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб"],
					months     : ["Январь", "Февраль", "Март", "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь"],
					monthsShort: ["Янв", "Фев", "Мар", "Апр", "Май", "Июн", "Июл", "Авг", "Сен", "Окт", "Ноя", "Дек"],
					today      : "Сегодня",
					clear      : "Очистить",
					format     : "dd.mm.yyyy",
					weekStart  : 1,
					monthsTitle: "Месяцы"
				};

				$('#datepicker').datepicker(
					{
						format        : 'yyyy-mm-dd',
						language      : 'ru',
						startDate     : '0d',
						maxViewMode   : 0,
						todayHighlight: true,
						toggleActive  : false,
						beforeShowDay : function (date) {

							const $toggleDate = date.getFullYear() + '-' + (date.getMonth() + 1) + '-' + date.getDate();
							if (typeof events[$toggleDate] !== 'undefined') {
								return {
									enabled: true,
									classes: 'has-event',
									content: '<div class="wrap">' + date.getDate() + '</div>'
								};
							} else {
								return {
									content: '<div class="wrap">' + date.getDate() + '</div>'
								};
							}

						}
					}
				).on('changeDate', function (e) {
					let datepicker     = $(this),
					    date           = new Date(e.date),
					    formatDate     = date.getFullYear() + '-' + (date.getMonth() + 1) + '-' + date.getDate(),
					    timeZoneOffset = date.getTimezoneOffset();

					let $cellTimestamp = new Date(date).setMinutes(new Date(date).getMinutes() - timeZoneOffset);

					let $cell            = datepicker.find('td[data-date="' + $cellTimestamp + '"]'),
					    offsetDatepicker = datepicker.offset().top,
					    offsetToCell     = $cell.offset().top - offsetDatepicker + 65;

					let $tpl = '<div class="datepicker-popover" style="top:' + offsetToCell + 'px;">';
					azi_events.then(function (events) {
						if (typeof events[formatDate].image !== 'undefined' && events[formatDate].image !== '') {
							$tpl += '<div class="image"><img src="' + events[formatDate].image + '" alt=""></div>';
						}

						$tpl += '<div class="datepicker-popover-content">';

						if (typeof events[formatDate].events !== 'undefined') {

							for (let i = 0; i < events[formatDate].events.length; i++) {
								let $sub_event = events[formatDate].events[i];

								$tpl += '<h4 class="datepicker-popover-title">' + $sub_event.title + '</h4>';
								$tpl += $sub_event.desc;

								if (typeof $sub_event.link !== 'undefined' && $sub_event.link !== '') {
									$tpl += '<a href="' + $sub_event.link + '" class="datepicker-view-link" target="_blank">Подробнее</a>';
								}
							}
						} else {
							$tpl += '<h4 class="datepicker-popover-title">' + events[formatDate].title + '</h4>';
							$tpl += events[formatDate].desc;

							if (typeof events[formatDate].link !== 'undefined' && events[formatDate].link !== '') {
								$tpl += '<a href="' + events[formatDate].link + '" class="datepicker-view-link" target="_blank">Подробнее</a>';
							}
						}
						$tpl += '</div></div>';

						datepicker.children('.datepicker-popover').remove();
						datepicker.append($tpl);
					});
				}).on('changeMonth', function (e) {
					$('.datepicker-popover').remove();
                });
			});
		}

		/* ---------------------- */
		$(document).on('click', '.navbar-toggle', function () {
			let $target = $(this).attr('data-target');

			$($target).toggleClass('in');
		});

		$(document).on('click', function (event) {
			if ($(event.target).closest('.navbar').length == 0) {
				let opened = $('.navbar-collapse').hasClass('in');
				if (opened === true) {
					$('.navbar-collapse').removeClass('in');
				}
			}

			if ($('.datepicker-popover').has(event.target).length === 0) {
				$('.datepicker-popover').remove();
			}
		});

	});

})(jQuery);