<template>
  <div class="saveExhibition xl:tw-max-w-[1246px] xl:tw-mx-auto">
    <div class="xl:tw-flex xl:tw-justify-between xl:tw-items-start">
      <userSidebar
        :userData="userData"
        :firstName="firstName"
        :lastName="lastName"
        class="tw-hidden xl:tw-block"
      >
      </userSidebar>
      <!-- <div class="xl:tw-hidden"></div> -->
      <div
        class="tw-bg-white xl:tw-p-[30px] xl:tw-rounded-[20px] xl:tw-min-w-[900px] xl:tw-max-w-[900px]"
      >
        <div
          class="tw-text-[20px] tw-font-bold tw-text-base-primary tw-mb-[20px] md:t24 md:tw-mb-[30px]"
        >
          <two-dots class="tw-mr-[30px]"></two-dots
          >{{ $t("userProfile.savedExhibitions") }}
        </div>

        <div class="tw-text-[14px] tw-text-base-primary tw-mb-[10px]">
          {{ $t("userProfile.savedExhibitionsFilter") }}
        </div>
        <div>
          <select
            v-model="countrySelect"
            class="tw-text-neutrals-500 tw-w-[196px] tw-border tw-border-solid tw-border-neutrals-200 tw-rounded-[10px] tw-px-[15px] tw-py-[9px] tw-head-body tw-outline-none focus:tw-border-primary-1 md:tw-text-[16px]"
          >
            <option
              v-for="(item, index) in countryOptions"
              :key="index"
              :value="item.id"
            >
              {{ item.name }}
            </option>
          </select>
          <!-- <select
            class="tw-text-neutrals-500 tw-border tw-border-solid tw-border-neutrals-200 tw-rounded-[10px] tw-px-[15px] tw-py-[9px] tw-head-body tw-outline-none focus:tw-border-primary-1 md:tw-text-[16px]"
          >
            <option v-for="(item, index) in statusOptions" :key="index">
              {{ item.status }}
            </option>
          </select> -->
        </div>
        <div
          v-if="userVisibleSavedExhibitionList.length == 0"
          class="tw-mt-[80px] md:tw-mt-[90px]"
        >
          <img
            class="tw-flex tw-mx-auto tw-w-[160px]"
            src="~/assets/img/savedExhibitionEmpty.png"
            alt=""
          />
          <div
            class="tw-text-[16px] tw-text-neutrals-800 tw-w-fit tw-mx-auto tw-mb-[50px] md:tw-mb-[60px]"
          >
            {{ $t("userProfile.noSavedExhibitions") }}
          </div>
          <nuxt-link
            :to="localePath('/')"
            class="tw-flex tw-text-[16px] tw-w-fit tw-bg-primary-1 tw-text-white tw-px-[16px] tw-py-[9px] tw-rounded-[12px] tw-mx-auto tw-mb-[37px] md:tw-mb-0"
          >
            {{ $t("Explore with ShowEasy") }}
          </nuxt-link>
        </div>

        <div v-else class="tw-mt-[20px] md:tw-mt-[30px]">
          <ExhibitionListCard
            v-for="(exhibition, index) in countryFilterList.slice(
              (this.page - 1) * 6,
              this.page * 6
            )"
            :key="index"
            class="tw-mb-[20px]"
            :item="exhibition"
            @toggle-favorite="removeExhibitionRelation($event)"
          >
          </ExhibitionListCard>
          <v-pagination
            v-model="page"
            class="tw-mt-[28px]"
            :length="userSavedExhibitionPageLength"
          ></v-pagination>
        </div>
      </div>
    </div>
  </div>
</template>
<script>
import TwoDots from "@/components/TwoDots";
import ExhibitionListCard from "~/components/exhibition/ExhibitionListCard.vue";
import userSidebar from "@/components/user/userSidebar.vue";
import elementSelect from "@/components/newComponent/form/ElementSelect.vue";
export default {
  name: "saveExhibition",
  layout: "profile",

  components: {
    TwoDots,
    ExhibitionListCard,
    userSidebar,
    elementSelect,
  },
  data() {
    return {
      firstName: "",
      lastName: "",
      userData: {},
      userCompanyId: [],
      userCompanyList: [],
      userAddNewCompanyList: [],
      userSavedExhibitionList: [],
      userVisibleSavedExhibitionList: [],
      userSavedExhibitionPageLength: 0,
      savedExhibitionPerPage: 6,
      yearOptions: [],
      monthOptions: [],
      dayOptions: [],
      yearSelect: "",
      monthSelect: "",
      daySelect: "",
      languageSelect: {
        en: "",
        zhtw: "",
      },
      phoneValid: false,
      countryOptions: [],
      countrySelect: 999,
      statusOptions: [],
      statusSelect: 100,
      page: 1,
      filterList: [],
      countryFilterList: [],
    };
  },
  async created() {
    // await this.fetchUserData();
    // await this.fetchSavedExhibition();
    // await this.$axios
    //   .get(`users/countries?lang=${this.$i18n.locale.replace("-", "")}`)
    //   .then((result) => {
    //     const initial = {
    //       name: this.$t("userProfile.allCountries"),
    //       id: 999,
    //     };
    //     this.countryOptions = result.data.result;
    //     this.countryOptions.splice(0, 0, initial);
    //   })
    //   .catch((err) => {
    //     console.log(err);
    //   });

    // await this.$axios
    //   .get(`exhibitions/filters?lang=${this.$i18n.locale.replace("-", "")}`)
    //   .then((result) => {
    //     this.statusOptions = result.data.filters.statuses;
    //   })
    //   .catch((err) => {
    //     console.log(err);
    //   });
    this.countryFilterList = this.userVisibleSavedExhibitionList;
  },
  mounted() {
    this.yearOptions = Array.from(new Array(103), (val, index) =>
      (index + 1920).toString()
    );
    this.monthOptions = Array.from(new Array(13), (val, index) => {
      if (index < 10 && index > 0) {
        return "0" + index.toString();
      }
      if (index >= 10) {
        return index.toString();
      }
    });
    this.dayOptions = Array.from(new Array(32), (val, index) => {
      if (index < 10 && index > 0) {
        return "0" + index.toString();
      }
      if (index >= 10) {
        return index.toString();
      }
    });
    this.$nextTick(() => {
      window.addEventListener("resize", this.onResize);
    });
  },
  watch: {
    countrySelect: {
      handler: function () {
        if (this.countrySelect) {
          this.filterSavedExhibition(this.countrySelect);
          // this.fetchSavedExhibition();
        }
      },
    },
  },
  computed: {},
  methods: {
    patchUserData() {
      if (this.width < 1366) {
        this.isEditInfoDialogActive = !this.isEditInfoDialogActive;
      }
      this.userData.prefer_country = JSON.stringify(this.languageSelect);
      if (this.$vuetify.breakpoint.name !== "xs") {
        this.userData.birth_date =
          this.yearSelect + "-" + this.monthSelect + "-" + this.daySelect;
        if (this.userData.birth_date.length < 10) {
          this.userData.birth_date = null;
        }
      }
      const patchData = JSON.parse(JSON.stringify(this.userData));
      delete patchData.LoginLog;
      delete patchData.UserCompany;
      delete patchData.UserSocialRelation;
      delete patchData.UserExhibition;
      this.$axios
        .put(
          `/member/users/${this.$route.params.id}?jwt=${
            this.$auth.$storage.getUniversal("jwt").token || ""
          }`,
          patchData
        )
        .then((res) => {
          this.successUpdate = !this.successUpdate;
          setTimeout(() => {
            this.successUpdate = !this.successUpdate;
          }, 1000);
          this.fetchUserData();
          this.$auth.$storage.setUniversal("userPicture", patchData.picture);
          this.$auth.$storage.setUniversal("userLastName", patchData.last_name);
          this.$store.dispatch("updatePicture");
        })
        .catch((err) => {
          console.log(err);
        });
    },
    async fetchUserData() {
      await this.$axios
        .get(
          `/member/users/${
            this.$auth.$storage.getUniversal("jwt").user_id
          }?jwt=${this.$auth.$storage.getUniversal("jwt").token}`
        )
        .then((res) => {
          this.userData = res.data;
          console.log(this.userData.UserExhibition);
          this.userCompanyId = res.data.UserCompany;
          this.firstName = res.data.first_name;
          this.lastName = res.data.last_name;
          this.userData.phone
            ? (this.phoneValid = true)
            : (this.phoneValid = false);
          !this.userData.prefer_country &&
          typeof this.userData.prefer_country === "object"
            ? this.userData.prefer_country
            : (this.languageSelect = JSON.parse(this.userData.prefer_country));
          if (
            !this.userData.birth_date &&
            typeof this.userData.birth_date === "object"
          ) {
            this.yearSelect = "";
            this.monthSelect = "";
            this.daySelect = "";
          } else {
            const date = this.userData.birth_date.split("-");
            this.yearSelect = date[0];
            this.monthSelect = date[1];
            this.daySelect = date[2];
          }
        })
        .catch((err) => {
          console.log(err);
        });
    },
    handleImageUpdate(pictureURL) {
      this.userData.picture = pictureURL;
      this.patchUserData();
      this.closeCropDialog();
    },

    logout() {
      this.$auth.$storage.removeUniversal("jwt");
      this.$auth.$storage.removeUniversal("userPicture");
      this.$auth.$storage.removeUniversal("userLastName");
      this.$auth.$storage.removeUniversal("userBeforePath");

      if (window.innerWidth < 1024) {
        this.$router.push(this.localePath("/"));
      } else {
        this.$router.push(this.localePath("/user"));
      }
      this.$auth.logout();
    },

    async fetchSavedExhibition() {
      // if (this.width < 1366) {
      //   this.isSavedExhibitionsDialogActive =
      //     !this.isSavedExhibitionsDialogActive;
      // } else {
      //   this.tabs = "savedExhibitions";
      // }
      const exhibitionList = [];
      for (let i = 0; i < this.userData.UserExhibition.length; i++) {
        exhibitionList.push(this.userData.UserExhibition[i].exhibition_id);
      }
      if (exhibitionList.length > 0) {
        await this.$axios
          .get(
            `/member/exhibitions?lang=${this.$i18n.locale.replace(
              "-",
              ""
            )}&exhibition_id=${[...exhibitionList]}`
          )
          .then((result) => {
            this.userSavedExhibitionList = result.data;
            console.log(this.userSavedExhibitionList);
            this.userSavedExhibitionPageLength = Math.ceil(
              this.userSavedExhibitionList.length / this.savedExhibitionPerPage
            );

            this.userSavedExhibitionList = this.userSavedExhibitionList;
            for (let i = 0; i < this.userSavedExhibitionList.length; i++) {
              this.userSavedExhibitionList[i].saved = true;
            }
            this.userVisibleSavedExhibitionList = JSON.parse(
              JSON.stringify(this.userSavedExhibitionList)
            );
          })
          .catch((err) => {
            console.log(err);
          });
      }
    },
    filterSavedExhibition(countryId) {
      this.page = 1;
      if (countryId == "999") {
        this.countryFilterList = JSON.parse(
          JSON.stringify(this.userSavedExhibitionList)
        );
      } else {
        this.countryFilterList = this.userVisibleSavedExhibitionList.filter(
          (item) => {
            return item.country.id == countryId;
          }
        );
      }
      this.userSavedExhibitionPageLength = Math.ceil(
        this.countryFilterList.length / this.savedExhibitionPerPage
      );
    },

    async removeExhibitionRelation() {
      this.page = 1;
      await this.fetchUserData();
      await this.fetchSavedExhibition();
      this.countryFilterList = this.userVisibleSavedExhibitionList;
      if (this.countrySelect.toString() !== "999") {
        this.countrySelect = 999;
      }
    },
  },
};
</script>

<style scoped lang="scss">
select {
  background-image: url("~/assets/svg/dropdownarrow.svg");
  width: auto;
  height: auto;
  background-position: right 12px center;
  background-repeat: no-repeat;
}
</style>
