<template>
  <div class="group tw-mb-[20px]">
    <div class="tw-flex tw-justify-between tw-items-center tw-mb-[20px]">
      <h3 class="t14 tw-font-bold tw-mb-0 md:t16">
        {{ $t(label) }}<span class="required tw-font-normal  t12 md:t14">*</span>
        <span v-if="validation.length==false" class="required md:tw-ml-[20px] tw-font-normal  t12 md:t14">{{ $t("Required.") }}</span>
      </h3>
      <button class="'seeMore tw-transition tw-btn-md tw-body-4 tw-text-secondary-default tw-px-[16px] tw-py-[9px]"
        @click="clearAll()">
        {{ $t("Clear all") }}
      </button>
    </div>
    <div>
      <div class="optionGroup tw-border tw-border-solid tw-border-slate-200 tw-rounded-[12px] tw-bg-white tw-p-[20px]">
        <div v-for="(item, index) in quantitySelectList" :key="index">
          <quantitySelectOption :index="index" :item="item" :hasValue="hasValue"
            :seeMore="seeMore" @disabled="disabled($event)" @selected="selected($event)" @change="change($event)">
          </quantitySelectOption>
        </div>
      </div>
      <button v-show="length !== undefined && length > 3" :class="[
        'seeMore tw-transition tw-btn-md tw-text-primary-1 tw-border tw-border-solid tw-border-primary-1 tw-px-[30px] tw-py-[8.5px] tw-mt-[20px] tw-w-full tw-rounded-xl hover:tw-bg-primary-3 xl:hover:tw-bg-transparent xl:tw-border-none',
        seeMore ? 'open' : '',
      ]" @click="seeMore = !seeMore">
        {{ $t(seeMoreText) }}
      </button>
    </div>
  </div>
</template>
<script>
import quantitySelectOption from "@/components/service/content/quantitySelectOption";
export default {
  components: {
    quantitySelectOption,
  },
  props: {
    label: {
      type: String,
    },
    quantitySelectList: {
      type: Array,
    },
    pickupServiceShow:{
      type: Boolean,
    }
  },
  data() {
    return {
      hasValue: null,
      seeMore: false,
      formData: {
        selectList: [],
        truckList: []
      },
      validation:{
        length: true
      },
      errors: null,
    };
  },
  computed: {
    seeMoreText() {
      if (this.seeMore == false) {
        return "See more";
      } else {
        return "See less";
      }
    },
    length() {
      if (this.quantitySelectList) {
        return this.quantitySelectList.length;
      } else {
        return 0;
      }
    },
    // clear() {
    //   return this.pickupServiceShow;
    // },
  },
  watch: {
    // clear: {
    //   handler: function (value) {
    //     // if(value==false){
    //     //   this.hasValue = null;
    //     //   this.formData.selectList = [];
    //     //   this.formData.truckList = [];
    //     //   this.$emit("ChangeCosts",{type: 'truck',value: this.formData});
    //     // }
    //   }
    // }
  },
  methods: { 
    disabled(i) {
      this.hasValue = i;
    },
    selected(data){
      if(this.formData.selectList.length>0){
        for(let i=0;i<this.formData.selectList.length;i++){
          if(this.formData.selectList[i].id == data.id){
            this.formData.selectList.splice(i, 1);
            break;
          }
        }
      }
      if(data.number>0){
        this.formData.selectList.push(data);
      }
      if(this.formData.selectList.length>0){
        this.validation.length = true;
      }else{
        this.validation.length = false;
      }
      this.$emit("ChangeCosts",{type: 'truck',value: this.formData});
    },
    change(data){
      if(this.formData.truckList.length>0){
        for(let i=0;i<this.formData.truckList.length;i++){
          if(this.formData.truckList[i].id == data.id){
            this.formData.truckList.splice(i, 1);
            break;
          }
        }
      }
      if(data.number!="" && data.number!=0){
        this.formData.truckList.push(data);
      }
      this.$emit("ChangeCosts",{type: 'truck',value: this.formData});
    },
    clearAll() {
      this.hasValue = 0;
      this.$nextTick(() => {
        this.hasValue = null;
      });
      this.formData.selectList = [];
      this.formData.truckList = [];
      this.$emit("ChangeCosts",{type: 'truck',value: this.formData});
    },
    validators() {
        if (this.formData.selectList.length <= 0) {
          this.validation.length = false;
        } else {
          this.validation.length = true;
        }
        this.errors = Object.entries(this.validation).filter(
          (e) => e[1] == false
        );
        if (this.errors.length > 0) {
          return false;
        } else {
          return true;
        }
    },
  },
};
</script>
<style lang="scss" scoped>
.custom-button {
  background-position: center;
  background-repeat: no-repeat;
  background-size: 12px;
}

.button {
  &-reduce {
    background-image: url("~/assets/svg/reduce.svg");
    background-color: #e5e5e5;
  }

  &-add {
    background-image: url("~/assets/svg/add.svg");
    background-color: #f48800;
  }
}

:deep() {
  .optionGroup {
    .optionItem:last-child {
      border: none !important;
      margin: 0 !important;
      padding: 0 !important;
    }
  }

}

.seeMore {
  &-hide {
    position: relative;
    max-height: 295px;
    overflow: hidden;

    &::after {
      content: "";
      display: block;
      position: absolute;
      background: url("~/assets/img/gradient_white.png") repeat-x left bottom;
      width: 100%;
      height: 130px;
      left: 0;
      bottom: 0;
      z-index: 1;
      transition: bottom 0.5s;
    }
  }

  &-show {
    position: relative;
    max-height: 100%;
    overflow: initial;

    &::after {
      display: none;
    }
  }

  @media screen and (min-width: 1366px) {
    position: relative;
    display: flex;
    align-items: center;
    justify-content: center;

    &::after {
      content: "";
      display: inline-block;
      position: relative;
      background-image: url("~/assets/svg/arrow-down-primary.svg");
      background-position: center center;
      background-repeat: no-repeat;
      background-size: 100%;
      width: 9px;
      height: 6px;
      margin-left: 16px;
      transition: all 0.2s linear;
    }

    &.open {
      &::after {
        transform: rotate(180deg);
      }
    }
  }
}
</style>