<template>
  <!-- #region  لیست تمام موجودیت ها   -->
  <div class="navigation mt-3">
    <div
      v-for="(item, key) in listEntity"
      :key="key"
      class="item mt-2"
      :class="{ active: activeItemClass(item) }"
    >
      <div class="d-flex position-relative text-10 mt-2 item-navigation">
        <i
          class="tavasi tavasi-Component-149--3 ms-1"
          style="color: var(--text-primary-highlight)"
        ></i>
        <a
          @click.prevent="showEntityContent(item)"
          class="text-title"
          v-tooltip="getTitle(item)"
          data-bs-toggle="tooltip"
          data-placement="top"
        >
          {{ getTitle(item) }}
        </a>
      </div>
    </div>
  </div>
  <!-- #endregion -->
</template>
<script>
import { mapState, mapActions } from "pinia";
import favoriteApi from "~/apis/favoriteApi";
import { useEntityStore } from "@search/stores/entityStore";
import { useSearchStore } from "~/stores/searchStore";
import { useCommonStore } from "~/stores/commonStore";
export default {
  props: ["item"],
  // mixins: [idbUtil],
  beforeMount() {
    this.httpService = useNuxtApp()["$http"];
  },
  mounted() {
    this.refreshList();
    this.ready = true;

    // if (this.$route.query.listkey) {
    // this.getAllFromIdb();
    // } else if (this.listEntity.length == 0)
    // this.listEntity = this.userHistoryGetter[this.$route.params.key];
  },
  computed: {
    ...mapState(useEntityStore, [
      "activeEntityViewSchemaGetter",
      "activeTabGetter",
      "listEntityGetter",
    ]),
    ...mapState(useCommonStore, ["userHistoryGetter"]),
  },
  data() {
    return {
      listEntity: [],
      selectedItem: undefined,
    };
  },
  methods: {
    ...mapActions(useEntityStore, ["SET_ITEM_ENTITY"]),

    refreshList() {
      this.getList();
      //  this.db =  this.getDb(this.$route.params.key);
      //  this.listEntity = this.getAllFromIdb(this.$route.params.key);
    },
    async getList() {
      let url = repoUrl()+ favoriteApi.favorite.getList;
      url = url.replace("@data_type", "history");
      url = url.replace("@offset", 0);
      url = url.replace("@limit", 30);
      url = url.replace("/@filter", "");

      this.httpService
        .getRequest(url)
        .then((res) => {
          this.listEntity = res?.hits?.hits;
          // res.hits.hits.forEach((item)=>{
          //   this.listEntity.push(item._source);
          // })
        })
        .finally(() => {
          // this.fetchingData = false;
        });
    },

    getTitle(item) {
      // if (this.activeEntityViewSchemaGetter?.entity_title)
      //   return item[this.activeEntityViewSchemaGetter.entity_title];
      return item._source.title;
    },
    /**
     * این تابع مقدار داده‌ای خاص از آیتم و کلید داده شده را بازمی‌گرداند.
     * @param {Object} item - آیتم داده
     * @param {string} key - کلید داده
     * @param {Object} [list_title] - قالب و کلیدهای لیست عنوان (اختیاری)
     * @returns {string} - مقدار داده‌ای
     */
    getDataValue(item, key, list_title = undefined) {
      if (!key) key = "title";

      let text = "";
      if (list_title) {
        text = list_title.template;
        list_title.keys.forEach((el) => {
          if (item._source[el.key]) {
            let tt = item._source[el.key];
            if (el.isDate) {
              tt = new Date(tt).toLocaleDateString("fa-IR");
            }
            text = text.replace("{" + el.key + "}", tt);
          }
        });
      } else text = item._source[key];

      return text;
    },
    /**
     * این تابع محتوای موجودیت را نمایش می‌دهد و آیتم را به روز می‌کند.
     * @param {Object} item - آیتم موجودیت
     * @param {string} key - کلید موجودیت
     */
    showEntityContent(item) {
      this.selectedItem = item;

      // console.log(item)

      let id = item._source?.ref_id;
      let key = item._source?.ref_key;
      // let type = 'item'
      // //"list,parent_key=qanon_id" or  "item"
      // if (item?.ref_property)
      //     properties = item?.ref_property.split(',')
      //     type = properties[0]

      let name = "navigation";
      if (key == "qasection" || key == "rgsection") {
      }

      this.$router
        .push({
          name: name,
          params: {
            id: id,
            key: key,
          },
        })
        .catch(() => {});

      // this.SET_ITEM_ENTITY(item);
      // this.appendclass();
    },
    /**
     * این تابع آدرس URL مرتبط با شناسه داده شده را بازمی‌گرداند.
     * @param {string} _id - شناسه موجودیت
     * @returns {string} - آدرس URL
     */
    urlResolver(_id) {
      let key = this.activeEntityViewSchemaGetter?.key;

      const routeData = this.$router.resolve({
        name: "navigationView",
        params: {
          id: _id,
          key: key,
        },
        query: {
          searchtext: this.$route.query.searchtext ?? undefined,
        },
      });
      return routeData.href;
    },
    /**
     * این تابع کلاس فعال را به آیتم اضافه می‌کند.
     * @param {Object} item - آیتم موجودیت
     * @returns {boolean} - وضعیت فعال بودن آیتم
     */
    activeItemClass(item) {
      let id = item._source.ref_id;
      let id_select = this.$route.params.id;

      if (this.selectedItem) {
        id_select = this.selectedItem._source.ref_id;
      }

      return id_select == id;
    },
    /**
     * این تابع کلاس "active" را به آیتمی که کاربر بر روی آن کلیک کرده است اضافه می‌کند و از بقیه آیتم‌ها حذف می‌کند.
     */
    appendclass() {
      const listItems = document.querySelectorAll(".item");

      listItems.forEach(function (item) {
        item.addEventListener("click", function () {
          // حذف کلاس "active" از همه المان‌های لیست
          listItems.forEach(function (item) {
            item.classList.remove("active");
          });

          // اضافه کردن کلاس "active" به المانی که کاربر بر روی آن کلیک کرده است
          this.classList.add("active");
        });
      });
    },
  },
};
</script>
<style lang="scss" scoped>
.text-title {
  font-size: 13px;
  text-decoration: none;
  color: #465a71;
  overflow: hidden;
  white-space: nowrap;
  text-overflow: ellipsis;
  padding: 0.3em;
}
.navigation {
  height: calc(100% - 5em);
  overflow: auto;
  background-color: var(--main-background-white);

  .item {
    &.active {
      .text-title {
        background-color: var(--hover-color);
      }
    }
  }
}
</style>
