<template>
  <v-card outlined class="rounded-xl px-3">
    <v-card-title> {{ $t("Categories") }} </v-card-title>
    <v-card-subtitle class="mt-0">
      <v-card outlined class="d-flex flex-row justify-space-between align-center px-3" style="border-radius: 12px"
        height="36" width="100%" :ripple="false" @click="dialog = true">
        <div style="color: #9c9c9c">{{ $t(searchBarTitle) }}</div>
        <v-img height="25" max-width="25" contain :src="require('~/assets/svg/search.svg')"></v-img>
      </v-card>
    </v-card-subtitle>
    <v-card-text class="ml-n4 mt-n3">
      <v-list>
        <v-list-group :value="categoryExpend[i]" v-for="(category, i) in categories.slice(0, 8)" :key="'category-' + i"
          :ref="'category-' + i" no-action class="my-n3">
          <template v-slot:activator>
            <v-list-item-title>{{ category.category }}</v-list-item-title>
          </template>

          <template v-slot:prependIcon>
            <v-checkbox dense hide-details v-model="categoryChecked" :value="category.id" @click.stop="
              () => {
                clickCategory(category.id);
              }
            "></v-checkbox>
          </template>
          <v-list-item v-for="(subcategory, j) in category.subcategories" :key="'category-' + i + 'subcategory-' + j">
            <v-list-item-icon>
              <v-checkbox dense hide-details v-model="subcategoryChecked" :value="subcategory.id" @click.stop="">
              </v-checkbox>
            </v-list-item-icon>
            <v-list-item-title v-text="subcategory.subcategory"></v-list-item-title>
          </v-list-item>
        </v-list-group>
      </v-list>
    </v-card-text>
    <v-card-text>
      <v-btn outlined class="rounded-xl remove-upper tw-border-primary-2 tw-text-primary-1 mt-n10"
        style="padding: 10px auto" width="100%" @click="dialog = true">
        {{ $t("See more") }}
      </v-btn>
    </v-card-text>

    <v-dialog @click:outside="text = ''" v-model="dialog" width="644" height="618" class="rounded-xl">
      <v-card class="rounded-xl pa-4" width="100%" height="100%">
        <v-card-title>
          <v-row no-gutters class="d-flex justify-space-between">
            <div class="ml-n3">{{ $t("Select Exhibition Categories") }}</div>
            <v-img :src="require('~/assets/svg/X.svg')" max-width="24" max-height="24" contain @click="dialog = false">
            </v-img>
          </v-row>
        </v-card-title>
        <v-card-subtitle class="mt-5">
          <v-text-field outlined dense v-model="text" class="rounded-xl" :label="$t('Find Exhibition categories ...')">
            <template v-slot:append>
              <v-img height="25" width="25" class="mt-n1" contain :src="require('~/assets/svg/search.svg')"></v-img>
            </template>
          </v-text-field>
        </v-card-subtitle>
        <v-card-text>
          <v-expansion-panels v-model="categoryDialogExpend" :key="updateExpand" class="elevation-0" flat multiple>
            <template v-for="(category, i) in categories">
            <v-expansion-panel :key="'category-' + i"
              v-if="categoryChild[i] > 0 || text === ''" flat class="mt-0">
              <v-expansion-panel-header class="py-0">
                <div class="checkbox-wrap d-flex align-center">
                  <v-checkbox class="mt-0 pt-0" dense hide-details v-model="categoryChecked" :value="category.id"
                    @click.stop="
                      () => {
                        clickCategory(category.id);
                      }
                    "></v-checkbox>
                </div>
                <span class="ms-5">{{ category.category }}</span>
              </v-expansion-panel-header>
              <v-expansion-panel-content class="pb-0">
                <template>
                <v-spacer :key="'category-' + i + 'subcategory-' + j"
                  class="d-flex align-center panel-content-wrap" v-if="
                    subcategory.subcategory
                      .toLowerCase()
                      .includes(text.toLowerCase()) || text == ''
                  ">
                  <div class="checkbox-wrap ms-9 me-5">
                    <v-checkbox dense hide-details class="mt-0 pt-0" v-model="subcategoryChecked"
                      :value="subcategory.id" @click.stop=""></v-checkbox>
                  </div>
                  <div class="mt-1">
                    {{ subcategory.subcategory }}
                  </div>
                </v-spacer>
                </template>
              </v-expansion-panel-content>
            </v-expansion-panel>
            </template>
          </v-expansion-panels>
        </v-card-text>
      </v-card>
    </v-dialog>
  </v-card>
</template>

<script>
export default {
  props: ["categories", "searchBarWidth", "searchBarTitle"],

  data() {
    return {
      categoryExpend: Array(100).fill(false),
      categoryDialogExpend: [],
      categoryChecked: [],
      subcategoryChecked: [],
      category2subcategory: {},
      categoryChild: [],
      dialog: false,
      updateExpand: false,
      text: "",
    };
  },
  created() {
    for (let i = 0; i < this.categories.length; i++) {
      this.category2subcategory[this.categories[i].id] = [];
      if (this.categories[i].subcategories != null) {
        this.categoryChild[i] = this.categories[i].subcategories.length;
        for (let j = 0; j < this.categories[i].subcategories.length; j++) {
          this.category2subcategory[this.categories[i].id].push(
            this.categories[i].subcategories[j].id
          );
        }
      }
    }
  },
  watch: {
    categoryChecked() {
      this.$emit("selectCategory", this.categoryChecked);
    },
    subcategoryChecked() {
      this.$emit("selectSubcategory", this.subcategoryChecked);
    },
    text() {
      this.categoryDialogExpend = [];
      let findCount = 0;
      for (let i = 0; i < this.$props.categories.length; i++) {
        let num = 0;
        for (
          let j = 0;
          j < this.$props.categories[i].subcategories.length;
          j++
        ) {
          if (
            this.$props.categories[i].subcategories[j].subcategory
              .toLowerCase()
              .includes(this.text.toLowerCase()) &&
            this.text !== ""
          ) {
            num++;
          }
        }
        this.categoryChild[i] = num;
        if (this.categoryChild[i] > 0) {
          findCount++;
        }
      }
      this.updateExpand = !this.updateExpand;
      this.categoryDialogExpend = [...Array(findCount).keys()];
      this.$forceUpdate();
    },
  },
  methods: {
    clickCategory(clickCategoryId) {
      if (this.categoryChecked.includes(clickCategoryId)) {
        // add
        let subCategoryList = this.category2subcategory[clickCategoryId];
        for (let i = 0; i < subCategoryList.length; i++) {
          let subCategoryId = subCategoryList[i];
          if (!this.subcategoryChecked.includes(subCategoryId))
            this.subcategoryChecked.push(subCategoryId);
        }
      } else {
        // delete
        let subCategoryList = this.category2subcategory[clickCategoryId];
        for (let i = 0; i < subCategoryList.length; i++) {
          let subCategoryId = subCategoryList[i];
          let idx = this.subcategoryChecked.indexOf(subCategoryId);
          if (idx > -1) this.subcategoryChecked.splice(idx, 1);
        }
      }
    },
  },
};
</script>

<style scoped lang="scss">
:deep() {
  .v-text-field__details {
    display: none !important;
  }

  .v-input__append-inner {
    margin-top: 12px !important;
  }

  .v-input--selection-controls__input {
    i {
      color: #f5cda8 !important;
    }
  }

  .v-label {
    color: #232323 !important;
    margin-left: 20px;
  }
}

.checkbox-wrap {
  max-width: 18px;
  height: 18px;
}

.panel-content-wrap {
  height: 40px;
}

.v-expansion-panel--active>.v-expansion-panel-header {
  min-height: 40px;
}
</style>
