class SlideShow {

constructor(slides, timeout) {
    if(slides.length < 2) {
        console.error("Aww, Jeeze! You need more slides!");
    }
    this._slides = slides;
    this._first = 0;
    this._last = this._slides.length - 1;
    this._index = this._first;
    this.showSlide(this._index++);
    if(timeout) {
        this.spawnTimerWorker();
    }
}
spawnTimerWorker() {
    this._timer = new Worker("/assets/js/slideshow/timer_worker.js");
    this._timer.postMessage("go");
    this._timer.addEventListener("message", _ => {
        this.nextSlide()
    });
    this._timer.addEventListener("error", _ => {
        console.error("Woah! Something went wrong there!")
    });
}
restartTimerWorker() {
    this._timer.terminate();
    this.spawnTimerWorker();
}
assessBounds(direction) {
    if(direction === "forward") {
        if(this._index > this._last) {
            this._index = this._first;
        }
    } else if(direction === "backward") {
        if(this._index < this._first) {
            this._index = this._last;
        }
    }
}
showSlide(index) {
    document.getElementById(this._slides[index]).style.display = "block";
}
closeSlide(index) {
    document.getElementById(this._slides[index]).style.display = "none";
}
closeSlides() {
    for(let i = this._first; i <= this._last; i++) {
        if(i !== this._index) {
            this.closeSlide(i);
        }
    }
}
nextSlide() {
    this.restartTimerWorker();
    this.closeSlides();
    this.showSlide(this._index++);
    this.assessBounds("forward");
}
previousSlide() {
    this.restartTimerWorker();
    this.closeSlides();
    this.showSlide(this._index--);
    this.assessBounds("backward");
}

}