let carouselWidth, carousel;

+function init() {
	let carouselRoot = document.createElement('div');
	carouselRoot.classList.add('root');

	carousel = document.querySelector("#Carousel");

	try {
		carouselWidth = Number(carousel.dataset.width);
	} catch (err) {
		console.log("%c ERROR ", "background-color:red;color:white;", err);
		carouselWidth = 600;
	}

	carousel.style.width = `${carouselWidth}px`;
	carousel.parentElement.append(carouselRoot);
	carouselRoot.append(carousel);

	if (carousel && carousel.children) {
		let inner = document.createElement('div'),
			index = 0;

		let images = carousel.querySelectorAll("[data-image]");

		for (let image of images) {
			let img = document.createElement("img");
			img.src = image.dataset.image;
			img.style.width = `${carouselWidth}px`;
			img.dataset.index = index++;
			inner.append(img);
		}
		inner.classList.add('inner', 'loaded');

		while (carousel.children.length > 0) {
			carousel.children[0].remove();
		}

		carousel.append(inner);

		let nextImage = function () {
			inner.style.transition = `left 200ms ease 0s`;
			inner.style.left = `-${carouselWidth * 2}px`;

			try {
				setDots(Number(inner.children[2].dataset.index));
			} catch (err) {
				console.log("%c ERROR ", "background-color:red;color:white;", err);
			}

			setTimeout(function (e, w) {
				e.style.transition = 'none';

				e.append(e.firstElementChild);

				e.style.left = `-${w}px`;
			}, 200, inner, carouselWidth);
		};

		let interval = setInterval(function () {
			if (inner.clientHeight != 0) {
				carousel.style.height = `${inner.clientHeight}px`;
				inner.style.position = 'absolute';
				inner.style.left = `-${carouselWidth}px`;
				inner.classList.remove('loaded');

				clearInterval(interval);
			}
		}, 100);

		let autoInterval = setInterval(nextImage, 5000);

		// Кнопки переключения
		let left = document.createElement('div'),
			right = document.createElement('div');

		left.classList.add('left');
		right.classList.add('right');

		left.addEventListener('click', function () {
			inner.style.transition = `left 200ms ease 0s`;
			inner.style.left = `0px`;

			try {
				setDots(Number(inner.children[0].dataset.index));
			} catch (err) {
				console.log("%c ERROR ", "background-color:red;color:white;", err);
			}

			setTimeout(function (e, w) {
				e.style.transition = 'none';

				e.prepend(e.lastElementChild);

				e.style.left = `-${w}px`;
			}, 200, inner, carouselWidth);

			clearInterval(autoInterval);
			autoInterval = setInterval(nextImage, 5000);
		});
		right.addEventListener('click', function () {
			nextImage();
			clearInterval(autoInterval);
			autoInterval = setInterval(nextImage, 5000);
		});

		carousel.append(left, right);

		if ("dots" in carousel.dataset && carousel.dataset.dots == "true") {
			// Навигационные точки
			// Размер одной точки 30x30px
			// Если ширина карусели меньше чем КоличествоКартинок * 30, тогда точки не показывать
			if (images.length * 30 < carouselWidth) {
				let dots = document.createElement('div');
				for (let i = 0; i < images.length; i++) {
					let dot = document.createElement('div');
					dot.classList.add('dot');
					dots.append(dot);
				}
				dots.classList.add('dots');
				dots.children[1].classList.add('active');
				carouselRoot.append(dots);
			}
		}
	}
}();

function setDots(index) {
	let activeDots = document.querySelectorAll(".dots > .dot.active");
	for (let ad of activeDots) {
		ad.classList.remove('active');
	}
	let dots = document.querySelector(".dots");
	dots.children[index].classList.add("active");
}