<template>
  <div
    v-show="value"
    class="van-image-preview"
    @touchstart="onTouchStart"
    @touchmove="onTouchMove"
    @touchend="onTouchEnd"
    @touchcancel="onTouchEnd"
  >
    <van-swipe>
      <van-swipe-item v-for="(item, index) in images" :key="index">
        <img class="van-image-preview__image" :src="item" >
      </van-swipe-item>
    </van-swipe>
  </div>  
</template>

<script>
import Popup from '../mixins/popup';
import Swipe from '../swipe';
import SwipeItem from '../swipe-item';

export default {
  name: 'van-image-preview',

  mixins: [Popup],

  components: {
    [Swipe.name]: Swipe,
    [SwipeItem.name]: SwipeItem
  },

  props: {
    overlay: {
      default: true
    },
    lockOnScroll: {
      default: true
    },
    closeOnClickOverlay: {
      default: true
    }
  },

  data() {
    return {
      images: []
    };
  },

  methods: {
    onTouchStart(event) {
      this.touchStartTime = new Date();
      this.touchStartX = event.touches[0].clientX;
      this.touchStartY = event.touches[0].clientY;
      this.deltaX = 0;
      this.deltaY = 0;
    },

    onTouchMove(event) {
      event.preventDefault();
      this.deltaX = event.touches[0].clientX - this.touchStartX;
      this.deltaY = event.touches[0].clientY - this.touchStartY;
    },

    onTouchEnd() {
      // prevent long tap to close component
      const deltaTime = new Date() - this.touchStartTime;
      if (deltaTime < 100 && Math.abs(this.deltaX) < 20 && Math.abs(this.deltaY) < 20) {
        this.value = false;
      }
    }
  }
};
</script>
