import { Middleware } from '~/types';
import { getSlideY } from '~/utils/getSlidePosition';

const vertical = (): Middleware => ({
  name: 'vertical',
  callback: (slider) => {
    slider.direction = 'vertical';
    slider.element.classList.add('s-slider-vertical');
    slider.slideHeight = slider.element.clientHeight;

    slider.slideStyles.width = '100%';
    slider.slideStyles.height = `${slider.slideHeight}px`;
    slider.slideStyles.marginBottom = slider.slideStyles.marginRight;
    slider.slideStyles.marginRight = '0px';

    slider.scrollWrapperTo = (y) => {
      slider.wrapperPosition = y;
      slider.wrapper.style.transform = `translate3d(0, -${y}px, 0)`;
    };

    slider.slideTo = (index) => {
      const max = slider.slides.length - slider.slidesPerView;

      if (index > max || index < 0) {
        return;
      }

      slider.runBeforeSlideChangeHooks(slider);

      const y = getSlideY(index, slider);

      slider.scrollWrapperTo(y);
      slider.activeView = index;

      slider.runSlideChangeHooks(slider);
    };
  },
});

export default vertical;
