<template>
  <div>
    <NuxtLayout name="default" :menu="sidbarMenu">
      <div class="container-fluid">
        <div class="row">
          <div class="col-xl-6 mb-5 mb-xl-10">
            <div class="card card-flush h-xl-100">
              <div class="card-header pt-7">
                <h3 class="card-title align-items-start flex-column">
                  <span class="card-label fw-bold text-dark"
                    >جستجوهای کاربران</span
                  >

                  <span class="text-gray-400 pt-2 fw-semibold fs-6"
                    >آخرین عبارات جستجو</span
                  >
                </h3>

                <div class="dropdown" v-if="false">
                  <button
                    class="btn btn-sm btn-light dropdown-toggle"
                    type="button"
                    id="dropdownMenuButton"
                    data-bs-toggle="dropdown"
                    aria-haspopup="true"
                    aria-expanded="false"
                  >
                    PDF Report
                  </button>

                  <div
                    class="dropdown-menu menu menu-sub menu-sub-dropdown menu-column menu-rounded menu-gray-600 menu-state-bg-light-primary fw-semibold w-100px py-4"
                    data-kt-menu="true"
                  >
                    <div class="menu-item px-3">
                      <a href="#" class="menu-link px-3"> Remove </a>
                    </div>

                    <div class="menu-item px-3">
                      <a href="#" class="menu-link px-3"> Mute </a>
                    </div>

                    <div class="menu-item px-3">
                      <a href="#" class="menu-link px-3"> Settings </a>
                    </div>
                  </div>
                </div>
              </div>

              <div class="card-body pt-5">
                <div
                  id="kt_charts_widget_15_chart"
                  class="min-h-auto ps-4 pe-6 mb-3 h-300px"
                >
                  <!-- <pie
                        :dataChart="listLastSearchText"
                        style="height: 100%; position: relative"
                      ></pie> -->
                  <WordCloud
                    :key="chartRender"
                    width="100%"
                    :data="listLastSearchText"
                    gridSize="10"
                    class="h-100 position-relative"
                  ></WordCloud>
                </div>
              </div>
            </div>
          </div>

          <div class="col-xl-6 mb-5 mb-xl-10">
            <div class="card card-flush h-xl-100">
              <div class="card-header pt-7">
                <h3 class="card-title align-items-start flex-column">
                  <span class="card-label fw-bold text-dark"
                    >جستجوهای کاربران</span
                  >

                  <span class="text-gray-400 pt-2 fw-semibold fs-6"
                    >بر حسب بیشترین تکرار جستجو</span
                  >
                </h3>

                <div class="dropdown" v-if="false">
                  <button
                    class="btn btn-sm btn-light dropdown-toggle"
                    type="button"
                    id="dropdownMenuButton"
                    data-bs-toggle="dropdown"
                    aria-haspopup="true"
                    aria-expanded="false"
                  >
                    PDF Report
                  </button>

                  <div
                    class="dropdown-menu menu menu-sub menu-sub-dropdown menu-column menu-rounded menu-gray-600 menu-state-bg-light-primary fw-semibold w-100px py-4"
                    data-kt-menu="true"
                  >
                    <div class="menu-item px-3">
                      <a href="#" class="menu-link px-3"> Remove </a>
                    </div>

                    <div class="menu-item px-3">
                      <a href="#" class="menu-link px-3"> Mute </a>
                    </div>

                    <div class="menu-item px-3">
                      <a href="#" class="menu-link px-3"> Settings </a>
                    </div>
                  </div>
                </div>
              </div>

              <div class="card-body pt-5">
                <!--begin::Chart container-->
                <div
                  id="kt_charts_widget_15_chart"
                  class="min-h-auto ps-6 pe-6 mb-3 h-300px"
                  dir="ltr"
                  style="direction: ltr"
                >
                  <WordCloud
                    :key="chartRender2"
                    width="100%"
                    gridSize="10"
                    :data="listMaxSearchText"
                    class="h-100 position-relative"
                  ></WordCloud>

                  <!-- <pie-chart
                        :data="pieData"
                        class="h-100 position-relative"
                      ></pie-chart> -->
                </div>
                <!--end::Chart container-->
              </div>
            </div>
          </div>

          <div class="col-xl-6 mb-5 mb-xl-10">
            <div class="card card-flush h-xl-100">
              <div class="card-header pt-7">
                <h3 class="card-title align-items-start flex-column">
                  <span class="card-label fw-bold text-dark"
                    >مراجعات کاربران</span
                  >

                  <span class="text-gray-400 pt-2 fw-semibold fs-6"
                    >عناوین پرتکرار اسنادی که کاربران متن آن را مشاهده
                    کردند</span
                  >
                </h3>

                <div class="dropdown">
                  <button
                    class="btn btn-sm btn-light dropdown-toggle"
                    type="button"
                    id="dropdownMenuButton"
                    data-bs-toggle="dropdown"
                    aria-haspopup="true"
                    aria-expanded="false"
                  >
                    {{ selectedDropdownFavorite }}
                  </button>

                  <div
                    class="dropdown-menu menu menu-sub menu-sub-dropdown menu-column menu-rounded menu-gray-600 menu-state-bg-light-primary fw-semibold w-100px py-4"
                    data-kt-menu="true"
                  >
                    <div
                      class="menu-item px-3"
                      v-for="(item, index) in dateFilterList"
                      :key="index"
                    >
                      <button-component
                        @click="getFavoriteData(item.key)"
                        :title="item.title"
                        class="menu-link px-3"
                        :classes="{
                          active: favoriteActiveItem == item.key,
                        }"
                        :buttonText="item.title"
                      ></button-component>
                    </div>
                  </div>
                </div>
              </div>

              <div class="card-body pt-5">
                <div
                  id="kt_charts_widget_15_chart"
                  class="min-h-auto ps-4 pe-6 mb-3 h-300px"
                >
                  <!-- <pie-donut
                        :dataPie="favoriteData"
                        :PieOptions="PieOptions"
                        style="height: 100%; position: relative"
                      ></pie-donut> -->
                  <WordCloud
                    :key="favoriteRender"
                    width="100%"
                    :data="favoriteData"
                    gridSize="10"
                    class="h-100 position-relative"
                  ></WordCloud>
                </div>
              </div>
            </div>
          </div>
          <div class="col-xl-6 mb-5 mb-xl-10">
            <div class="card card-flush h-xl-100">
              <div class="card-header pt-7">
                <h3 class="card-title align-items-start flex-column">
                  <span class="card-label fw-bold text-dark"
                    >علامت گذاری کاربران</span
                  >

                  <span class="text-gray-400 pt-2 fw-semibold fs-6"
                    >عناوین پرتکرار اسنادی که کاربران متن آن را علامتگذاری
                    کردند</span
                  >
                </h3>

                <div class="dropdown">
                  <button
                    class="btn btn-sm btn-light dropdown-toggle"
                    type="button"
                    id="dropdownMenuButton"
                    data-bs-toggle="dropdown"
                    aria-haspopup="true"
                    aria-expanded="false"
                  >
                    {{ selectedDropdownBookMark }}
                  </button>

                  <div
                    class="dropdown-menu menu menu-sub menu-sub-dropdown menu-column menu-rounded menu-gray-600 menu-state-bg-light-primary fw-semibold w-100px py-4"
                    data-kt-menu="true"
                  >
                    <div
                      class="menu-item px-3"
                      v-for="(item, index) in dateFilterList"
                      :key="index"
                    >
                      <button-component
                        @click="getBookMarkData(item.key)"
                        :title="item.title"
                        class="menu-link px-3"
                        :buttonText="item.title"
                        :classes="{
                          active: bookMarkActiveItem == item.key,
                        }"
                      ></button-component>
                    </div>
                  </div>
                </div>
              </div>

              <div class="card-body pt-5">
                <div
                  id="kt_charts_widget_15_chart"
                  class="min-h-auto ps-4 pe-6 mb-3 h-300px"
                >
                  <!-- <Bar
                        :dataChart="bookMarkData"
                        style="height: 100%; position: relative"
                      ></Bar> -->
                  <WordCloud
                    :key="bookMarkRender"
                    width="100%"
                    :data="bookMarkData"
                    gridSize="10"
                    class="h-100 position-relative"
                  ></WordCloud>
                </div>
              </div>
            </div>
          </div>
        </div>
      </div>
    </NuxtLayout>
  </div>
</template>
<script>
import adminMenu from "~/json/admin/json/menu.json";
import { useCommonStore } from "~/stores/commonStore";
import { mapState } from "pinia";
import reportExtension from "~/extensions/reportExtension";
// import HttpService from "@services/httpService";
import adminApi from "~/apis/adminApi";

export default {
  // name: "admin",
  setup() {
    definePageMeta({
      layout: false,
      // name: "admin",
    });
  },

  extends: reportExtension,
  beforeMount() {
    this.httpService = useNuxtApp()["$http"];
  },
  beforeCreate() {
    // ApiService.init(process.env.VUE_APP_REPO_BASE_URL);
    // this.permitHttpService = new HttpService();
  },
  mounted() {
    const vm = this;
    // ,vm.getData("nokeys")
    Promise.allSettled([vm.getData("last", 20), vm.getData("count", 100)]).then(
      function (results) {
        results.forEach((result, index) => {
          if (result.status === "fulfilled" && result.value?.length)
            result.value?.forEach((element) => {
              if (index == 0) {
                let splittedTitles = element.key.split(" ");

                if (splittedTitles.length > 4) {
                  let title = "";
                  for (let i = 0; i < 4; i++)
                    title += splittedTitles[i] + (i == 3 ? "..." : " ");

                  element.key = title;
                }

                vm.listLastSearchText.push({
                  category: element.key,
                  value: element.doc_count,
                  name: element.key,
                  weight: element.doc_count,
                });
              } else if (index == 1)
                vm.listMaxSearchText.push({
                  // for list
                  category: element.key,
                  value: element.doc_count,
                  // for cload chart
                  name: element.key,
                  weight: element.doc_count,
                });
              // else if (index == 1)
              //   vm.noKeysData.push({
              //     category: element.key,
              //     value: element.doc_count,
              //   });
            });
        });

        vm.showCharts = true;
      }
    );
    setTimeout(() => {
      this.chartRender++;
      this.chartRender2++;
    }, 1000);

    this.getFavoriteData();
    this.getBookMarkData();
  },
  data() {
    return {
      selectedDropdownFavorite: "",
      selectedDropdownBookMark: "",
      PieOptions: {
        radius: ["40%", "70%"],
        selectedMode: "single",
      },
      menu: adminMenu,
      bookMarkActiveItem: "all",
      favoriteActiveItem: "all",
      favoriteRender: 0,
      bookMarkRender: 0,
      chartRender: 0,
      chartRender2: 0,
      dateFilterList: [
        {
          title: "تا یک روز ",
          key: "day",
        },
        {
          title: "تا یک هفته ",
          key: "week",
        },
        {
          title: "تا یک ماه",
          key: "month",
        },
        {
          title: "تا شش ماه",
          key: "month6",
        },
        {
          title: "تا یک سال",
          key: "year",
        },
        {
          title: "همه",
          key: "all",
        },
      ],

      lastSearchInListMode: true,
      topRepeatInListMode: true,
      systems: [],
      db: undefined,
      // permitHttpService: undefined,
      listLastSearchText: [],
      noKeysData: [],
      listMaxSearchText: [],
      bookMarkData: [],
      favoriteData: [],
      showCharts: false,
    };
  },
  computed: {
    ...mapState(useCommonStore, ["isSidebarCollapsed"]),
    sidbarMenu() {
      return adminMenu;
    },
  },
  methods: {
    getFavoriteData(timeKey = "all") {
      this.favoriteActiveItem = timeKey;
      this.selectedDropdownFavorite =
        this.dateFilterList.find((item) => item.key === timeKey)?.title ||
        "انتخاب تاریخ";

      // if (this.fetchingData) return;
      // this.fetchingData = true;
      let url = adminApi.favorite.favoriteList;
      // url = url.replace("{{@data_type}}", "favorite");
      url = url.replace("@data_type", "history");
      url = url.replace("@time_key", timeKey);
      return this.httpService
        .getRequest(url)
        .then((response) => {
          let res = response.aggregations.result.buckets;
          let chartData = [];
          res.forEach((element) => {
            let splittedTitles = element.key.split(" ");
            if (splittedTitles.length > 4) {
              let title = "";
              for (let i = 1; i < 4; i++)
                title += splittedTitles[i] + (i == 3 ? "..." : " ");
              element.key = title;
            }
            chartData.push({
              category: element.key,
              value: element.doc_count,
              name: element.key,
              weight: element.doc_count,
            });
          });
          this.favoriteData = chartData;
          this.favoriteRender++;
          // vm.fetchingData = false;
        })
        .catch((error) => {
          // vm.fetchingData = false;
          // vm.$alert(error);
        });
    },
    getBookMarkData(timeKey = "all") {
      this.bookMarkActiveItem = timeKey;
      this.selectedDropdownBookMark =
        this.dateFilterList.find((item) => item.key === timeKey)?.title ||
        "انتخاب تاریخ";
      // if (this.fetchingData) return;
      // this.fetchingData = true;
      let url = adminApi.favorite.bookmarkList;
      // url = url.replace("@data_type", "favorite");
      url = url.replace("@data_type", "bookmark");
      url = url.replace("@time_key", timeKey);
      return this.httpService
        .getRequest(url)
        .then((response) => {
          let res = response.aggregations.result.buckets;
          let chartData = [];
          res.forEach((element) => {
            chartData.push({
              category: element.key,
              value: element.doc_count,
              name: element.key,
              weight: element.doc_count,
            });
          });
          this.bookMarkData = chartData;
          this.bookMarkRender++;
          console.log("🟢 ~ .then ~ bookMarkData:", bookMarkData);
          // vm.fetchingData = false;
        })
        .catch((error) => {
          // vm.fetchingData = false;
          // vm.$alert(error);
        });
    },
  },

  components: {
    // WordCloud: () => import("@components/charts/WordCloud.vue"),
    // Pie: () => import("@components/charts/Pie.vue"),
    // PieDonut: () => import("@components/charts/PieDonut.vue"),
    // Bar: () => import("@components/charts/Bar.vue"),
  },
};
</script>

<style lang="scss" scoped>
.pages-content-container {
  overflow-y: auto;
}
.text-dark {
  color: var(--bs-text-dark) !important;
}
.pt-7 {
  padding-top: 1.75rem !important;
}
.fw-bold {
  font-weight: 600 !important;
}
.text-dark {
  color: var(--bs-text-dark) !important;
}

.fw-semibold {
  font-weight: 500 !important;
}
.fs-6 {
  font-size: 1.075rem !important;
}
.text-gray-400 {
  color: var(--bs-text-gray-400) !important;
}
.min-h-auto {
  min-height: auto !important;
}
.ps-4 {
  padding-left: 1rem !important;
}
.pe-6 {
  padding-right: 1.5rem !important;
}
.h-300px {
  // height: 300px !important;
  height: 30em !important;
}
.card {
  --bs-text-gray-400: #b5b5c3;
  --bs-body-bg: #fff;
  --bs-box-shadow: 0 0.5rem 1.5rem 0.5rem rgba(0, 0, 0, 0.075);
  --bs-menu-dropdown-box-shadow: 0px 0px 50px 0px rgba(82, 63, 105, 0.15);
  --bs-menu-dropdown-bg-color: var(--bs-body-bg);

  --bs-card-spacer-y: 1rem;
  --bs-card-spacer-x: 1rem;
  --bs-card-title-spacer-y: 0.5rem;
  --bs-card-title-color: ;
  --bs-card-subtitle-color: ;
  --bs-card-border-width: 1px;
  --bs-card-border-color: var(--bs-border-color);
  --bs-card-border-radius: 0.625rem;
  --bs-card-box-shadow: 0px 0px 20px 0px rgba(76, 87, 125, 0.02);

  --bs-card-bg: #f8f9fa;

  position: relative;
  display: flex;
  flex-direction: column;
  min-width: 0;
  height: var(--bs-card-height);
  word-wrap: break-word;
  background-color: var(--bs-card-bg);
  background-clip: border-box;
  border: var(--bs-card-border-width) solid var(--bs-card-border-color);
  border-radius: var(--bs-card-border-radius);
  box-shadow: var(--bs-card-box-shadow);
  border: 0;

  &.card-flush > .card-header {
    border-bottom: 0 !important;
  }
  .card-header {
    display: flex;
    justify-content: space-between;
    align-items: stretch;
    flex-wrap: wrap;
    min-height: 70px;
    padding: 0 2.25rem;
    color: var(--bs-card-cap-color);
    background-color: var(--bs-card-cap-bg);
    border-bottom: 1px solid var(--bs-card-border-color);

    .card-title {
      display: flex;
      align-items: center;
      margin: 0.5rem;
      margin-left: 0;

      font-weight: 500;
      font-size: 1rem;
      color: var(--bs-text-dark);

      &.flex-column {
        align-items: flex-start;
        justify-content: center;
      }

      .card-label {
        margin: 0 0.75rem 0 0;
        flex-wrap: wrap;
        font-weight: 500;
        font-size: 1rem;
        color: var(--bs-text-dark);
      }
    }

    .card-toolbar {
      display: flex;
      align-items: center;
      margin: 0.5rem 0;
      flex-wrap: wrap;
    }
  }

  .card-body {
    padding: 2rem 2.25rem;
    color: var(--bs-card-color);
    flex: 1 1 auto;
    padding: var(--bs-card-spacer-y) var(--bs-card-spacer-x);
    color: var(--bs-card-color);
  }
}

.menu-sub-dropdown {
  border-radius: 0.475rem;
  background-color: var(--bs-menu-dropdown-bg-color);
  box-shadow: var(--bs-menu-dropdown-box-shadow);
  z-index: 107;
  text-align: right;

  .menu-item {
    .menu-link {
      &.active,
      &:hover {
        background-color: var(--primary-color);
      }
    }
  }
}
.card-flush {
  box-shadow: 0 0.4688rem 2.1875rem rgba(4, 9, 20, 0.03),
    0 0.9375rem 1.4063rem rgba(4, 9, 20, 0.03),
    0 0.25rem 0.5313rem rgba(4, 9, 20, 0.03),
    0 0.125rem 0.1875rem rgba(4, 9, 20, 0.03);
}
.dropdown-toggle {
  border: 1px solid var(--primary-color);
}
</style>
../../apis/adminApi