import { Middleware, Slider } from '~/types';

export const getActiveSlides = (slider: Slider) => {
  const activeView = Math.round(slider.activeView);

  return slider.slides.slice(
    activeView,
    activeView + Math.floor(slider.slidesPerView),
  );
};

const activeClass = (activeClassName = 's-slide-active'): Middleware => ({
  name: 'activeClass',
  callback: (slider) => {
    slider.onBeforeSlideChange(() => {
      const activeSlides = getActiveSlides(slider);

      activeSlides.forEach((slide) => slide.classList.remove(activeClassName));
    });

    const handleSlideChange = () => {
      const activeSlides = getActiveSlides(slider);

      activeSlides.forEach((slide) => slide.classList.add(activeClassName));
    };

    handleSlideChange();

    slider.onCleanUp(() => slider.removeSlideChangeHook(handleSlideChange));
    slider.onSlideChange(handleSlideChange);
  },
});

export default activeClass;
