<template>
  <div class="product-left">
    <div class="media">
      <div class="big" v-show="bigShow">
        <img :src="$utils.generateResizedImageUrl(comInfo.mergeImages[currentPre],1800)" alt="" ref="big" />
      </div>
      <el-carousel 
        :interval="5000"
        arrow="always"
        height="578px"
        indicator-position="none"
        :autoplay="false"
        ref="carousel"
        @change="changeCarousel "
        v-show="!btnCurrent"
      >
        <el-carousel-item v-for="item in comInfo.mergeImages" :key="item">
          <!-- <div class="banner" :style="{backgroundImage: 'url(' + item + ')'}"></div> -->
          <zoom :imgUrl="$utils.generateResizedImageUrl(comInfo.mergeImages[currentPre],1800)" @sendStyle="getStyle" @handleViwer="handleViwer"></zoom>
        </el-carousel-item>
        <el-carousel-item v-if="comInfo.video">
          <video controls width="100%" height="100%" ref="video">
            <source 
            :src="comInfo.video">
            Your browser does not support the video tag.
          </video>
        </el-carousel-item>
      </el-carousel>
      <template v-if="pageData.template.length">
        <bxh
          v-show="btnCurrent"
          :link="pageData.template[current3D].link"
          :bxhType="'3D'"
          :height="'578px'"
          :key="current3D"
        ></bxh>
        <!-- 放大&3D按钮切换 -->
        <section class="switch-wrap" v-show="btnShow">
          <div class="switch-btn" v-show="btnCurrent">
            <span
              class="primary_button"
              @click="goDesign(pageData.template[current3D].template_id, pageData.template[current3D].link)"
              >Custom Design</span>
          </div>
          <div class="switch-btn">
            <span
              class="primary_button"
              :class="btnCurrent == index ? 'primary_checked' : ''"
              @click="handleSwitch(index)"
              v-for="(item, index) of btnObj"
              :key="index"
              >{{ item }}</span
            >
          </div>
        </section>
      </template>
    </div>
    <div class="smImgUl" v-show="!btnCurrent">
      <ul>
        <li
          @click="changeCarousel (index)"
          :class="currentPre == index ? 'slip' : ''"
          v-for="(item, index) of comInfo.mergeImages"
          :key="index"
          class="banner"> 
            <el-image 
              :src="$utils.generateResizedImageUrl(item,100)"
              class="card-img-1"
              fit="cover"
              style="width: 100%; height: 100%"
            ></el-image>
        </li>
        <li
          @click="changeCarousel (comInfo.mergeImages?.length)"
          :class="currentPre == comInfo.mergeImages?.length ? 'slip' : ''"
          v-if="comInfo.video && !btnCurrent">
          <video width="100%" height="100%" :src="comInfo.video" />
          <div class="playMask">
            <img src="@/assets/img/play.png" alt="" />
          </div>
        </li>
      </ul>
    </div>
    <!-- 包小盒3D图列表 -->
    <div class="smImgUl" v-show="btnCurrent">
      <ul>
        <li
          @click="selectCurrent3D(index)"
          :class="current3D == index ? 'slip' : ''"
          v-for="(item, index) of pageData.template"
          :key="index"
          class="banner"
          :style="{ backgroundImage: 'url(' + item.image + ')' }"
        ></li>
      </ul>
    </div>
    <ElImageViewer
      v-if="showViewer" :initial-index="currentPre"
      :on-close="closeViewer"
      :url-list="comS3Img"
    />
  </div>
</template>
  
<script>
import { mapMutations } from 'vuex'
import ElImageViewer from "element-ui/packages/image/src/image-viewer";
import Zoom from "@/components/Zoom";

export default {
  components: { Zoom,ElImageViewer },
  props: {
    pageData: {
      type: Object,
      default: () => {
        return {};
      },
    },
    id: {
      type: Number,
      default: 0
    },
  },
  data() {
    return {
      indexBanner: [],
      btnObj: ["View larger", "3D Preview"],
      btnCurrent: 0, // 0 预览图,1 3D图
      // currentPre: 0, // 预览图序号
      current3D: 0,  // 3D图序号
      btnShow: true, // 所有按钮显示
      bigShow: false,
      showViewer: false,
    };
  },
  computed: {
    currentPre(){
      return this.$store.state.product.smImgUlIdx
    },
    comInfo(){
      const temp = this.pageData.main
      const a = temp.image_color.map((i)=>i.image)
      temp.mergeImages = [...temp.images,...a]
			return temp
		},
    comS3Img(){
			return this.comInfo.mergeImages.map(url => this.$utils.repaceDomain(url));
		}
  },
  watch:{
    currentPre(newVal){
      this.$refs.carousel.setActiveItem(newVal);
    }
  },
  mounted(){
    if(this.comInfo.video){
      this.$refs.video.volume = 0.5;
    }
  },
  methods: {
    ...mapMutations({ setSmImgUlIdx: 'product/setSmImgUlIdx' }),
    handleSwitch(val) {
      this.btnCurrent = val;
    },
    changeCarousel (val) {
      this.setSmImgUlIdx(val);
      if (val === this.comInfo.mergeImages?.length) {
        this.btnShow = false;
        this.comInfo.video && this.$refs.video.play();
      } else {
        this.btnShow = true;
        this.comInfo.video && this.$refs.video.pause();
      }
    },
    selectCurrent3D(val) {
      this.current3D = val;
    },
    goDesign(template_id, goods_id) {
      this.$axios
        .get("/bxh/design", { params: { template_id, goods_id } })
        .then((res) => {
          const { href } = this.$router.resolve({
            name: "design-id",
            params: { id: res.result },
          });
          window.open(href, "_black");
        });
    },
    getStyle(val) {
      const bigImg = this.$refs.big;
      bigImg.style.left = -2 * val.left + "px";
      bigImg.style.top = -2 * val.top + "px";
      this.bigShow = val.bigShow;
    },
    closeViewer() {
      this.showViewer = false;
    },
	handleViwer(){
		this.showViewer = true;
	}
  }
};
</script>
  
  <style lang="scss" scoped>
.product-left {
  padding-right: 20px;
  .media {
    border: 1px solid rgba(74, 89, 108, 0.2);
    position: relative;
    width: 578px;
    height: 578px;
    .banner {
      width: 100%;
      height: 100%;
      background-size: cover;
      background-repeat: no-repeat;
      background-position: center;
    }
    video {
      object-fit: contain;
    }
    .design_list_img {
      padding: 10px;
      // display: flex;
      // flex-wrap: wrap;
      // justify-content:space-around;
      display: grid;
      grid-template-columns: repeat(4, 1fr);
      gap: 10px;
      li {
        cursor: pointer;
        // width: 192px;
        // height:192px;
      }
    }
    .switch-wrap {
      position: absolute;
      left: 50%;
      bottom: 20px;
      transform: translate(-50%, 0);
      z-index: 2;
      font-family: ProximaNova-Regular;
    }
    .switch-btn {
      text-align: center;
      &:nth-child(1) {
        margin-bottom: 20px;
      }
      .primary_button {
        display: inline-block;
        cursor: pointer;
        width: 140px;
        background: rgba(255, 255, 255);
        box-shadow: 0 2px 4px 1px rgba(0, 0, 0, 0.2);
        padding: 10px 0;
        color: #00213b;
        transition: all 0.2s ease-out 0s;
      }
      .primary_checked {
        background: #00213b !important;
        color: #fff !important;
      }
    }
  }
  .smImgUl {
    ul {
      margin-top: 10px;
      display: inline-grid;
      grid-template-columns: repeat(8, 68px);
      gap: 5px;
      li {
        box-sizing: border-box;
        border: 1px solid #eee;
        cursor: pointer;
        width: 100%;
        height: 68px;
        background-size: cover;
        background-repeat: no-repeat;
        background-position: center;
        position: relative;
      }
      .slip {
        border-color: #4a596c !important;
      }
      .playMask {
        position: absolute;
        top: 0;
        width: 100%;
        height: 100%;
        background-color: rgba(0, 0, 0, 0.3);
        display: flex;
        align-items: center;
        justify-content: center;
      }
    }
  }
}

.big {
  width: 100%;
  height: 100%;
  position: absolute;
  top: -1px;
  left: 100%;
  border: 1px solid rgba(74, 89, 108, 0.2);
  overflow: hidden;
  z-index: 3;
  //   display: block;
  background: white;
  // box-sizing: border-box;
  img {
    width: 200%;
    max-width: 200%;
    height: 200%;
    position: absolute;
    left: 0;
    top: 0;
    object-fit: cover;
  }
}
</style>