<template>
  <div class="dashboard-page">
    <!-- <div class="container"> -->
    <!-- <div class="row"> -->
    <!-- <div class="col-12"> -->
    <div class="row row-gap">
      <div v-if="canView">
        <div v-if="systems.length">
          <div v-if="layout == 'card'">
            <div v-for="project in systems" :key="project.id" class="col-lg-3">
              <a
                :href="project.link"
                @click.prevent="redirectTo(project)"
                :disabled="project?.loading"
                class="card system-card no-text-decoration"
                :title="project.title"
              >
                <div class="card-img-top">
                  <NuxtImg :src="projectIcon(project.link)" :alt="project.title" />
                </div>

                <div class="card-body">
                  <h5 class="card-title">
                    {{ project.title }}
                    <!--                    <small>-->
                    <!--                      ({{ organ }})-->
                    <!--                    </small>-->
                  </h5>
                  <p class="card-text">
                    {{ project.comment }}
                  </p>
                </div>

                <the-button-loading
                  v-if="project?.loading"
                ></the-button-loading>
              </a>
            </div>
          </div>

          <div v-else-if="layout == 'horizontal'">
            <div v-for="project in systems" :key="project.id" class="col-12">
              <a
                :href="project.link"
                @click.prevent="redirectTo(project)"
                :disabled="project?.loading"
                class="card system-card no-text-decoration"
                :class="layout"
                :title="project.title"
              >
                <div class="card-img-top">
                  <img
                    class="img-fluid"
                    :src="projectIcon(project.link)"
                    :alt="project.title"
                  />
                </div>

                <div class="card-body">
                  <h5 class="card-title">
                    {{ project.title }}
                    <!--                    <small>-->
                    <!--                      ({{ organ }})-->
                    <!--                    </small>-->
                  </h5>
                  <p class="card-text">
                    <!-- {{ project.link + "Description" }} -->
                    {{ project.comment }}
                  </p>
                </div>

                <the-button-loading
                  v-if="project?.loading"
                ></the-button-loading>
              </a>
            </div>
          </div>

          <div v-else-if="layout == 'list'">
            <div v-for="project in systems" :key="project.id" class="col-12">
              <a
                :href="project.link"
                @click.prevent="redirectTo(project)"
                :disabled="project?.loading"
                class="card system-card no-text-decoration"
                :class="layout"
                :title="project.title"
              >
                <div class="card-img-top">
                  <img
                    class="img-fluid"
                    :src="projectIcon(project.link)"
                    :alt="project.title"
                  />
                </div>

                <div class="card-body">
                  <h5 class="card-title">
                    {{ project.title }}
                  </h5>
                </div>

                <the-button-loading
                  v-if="project?.loading"
                ></the-button-loading>
              </a>
            </div>
          </div>
        </div>
        <no-data class="col-12" v-else></no-data>
      </div>
      <no-data v-else>
        <the-content-loading v-if="fetchingData"></the-content-loading>

        <div v-else class="d-flex justify-content-center align-items-center">
          <div
            class="alert alert-warning d-flex justify-content-center align-items-center"
          >
            <span
              class="tavasi tavasi-warning-circle color-inherit ml-1 text__32"
            ></span>
            {{ $t("Inaccessibility") }}
          </div>
        </div>
      </no-data>

      <!-- <div class="card-body">
        <ul id="etrn" style="margin: 4%;">
          <li>
            <a href="http://pub.hamfahmi.ir/public">پوشه شخصی</a>
          </li>
          <li>
            <a href="http://pub.hamfahmi.ir/wiki">ویکی فرهنگستان</a>
          </li>
          <li>
            <a href="http://pub.hamfahmi.ir:91/">پرتال جامع پژوهشی</a>
          </li>
          <li>
            <a href="http://pub.hamfahmi.ir:94/">نرم افزار جامع پژوهشی-اداری</a>
          </li>
        </ul>
      </div> -->
    </div>
  </div>
</template>
<script>
import { mapActions, mapState } from "pinia";
import { useCommonStore } from "~/stores/commonStore";

export default {
  props: {
    layout: {
      default: "card",
    },
  },
  data() {
    return {
      systems: [],
      db: undefined,
      canView: false,
      fetchingData: false,
    };
  },
  computed: {
    ...mapState(useCommonStore, ["isSidebarCollapsed"]),
  },

  beforeCreate() {
    ApiService.init(import.meta.env.VITE_PERMIT_BASE_URL);
  },

  async mounted() {
    setTimeout(() => {
      this.checkPermisionBeforGetList();
    }, 500);
  },

  methods: {
    ...mapActions(useCommonStore, [
      "SET_USER_PERMISSIONS",
      "SET_AUTHORIZED_PAGES",
      "getSystems",
      "setBodyClass",
      "checkPermissions",
      "activeSystemSetter",
    ]),
    checkPermisionBeforGetList() {
      if (this.fetchingData) return;
      this.fetchingData = true;

      // this.checkPermissions({ permission: "my-systems_list", _this: this })
      // .then(() => {
      this.getSystems()
        .then((data) => {
          this.systems = data.filter(
            (item) => item.showInDashboard && !this.hamfahmiState(item)
          );
          this.canView = true;
        })
        .catch(() => {
          this.canView = false;
        })
        .finally(() => {
          this.fetchingData = false;
        });
      // })
      // .catch(() => {
      //   this.canView = false;
      //   this.fetchingData = false;
      // });
    },

    hamfahmiState(item = undefined) {
      if (buildName()() == "monir") {
        if (buildState()() == 1)
          if (item) return item.link != "chat" && item.link != "jahat";
      } else return false;
    },

    // async getDb() {
    //   const DB_NAME = "hamfahmi-table";
    //   const DB_VERSION = 1;

    //   return new Promise((resolve, reject) => {
    //     let request = window.indexedDB.open(DB_NAME, DB_VERSION);

    //     request.onerror = (e) => {
    //       console.log("Error opening db", e);
    //       reject("Error");
    //     };

    //     request.onsuccess = (e) => {
    //       resolve(e.target.result);
    //     };

    //     request.onupgradeneeded = (e) => {
    //       console.log("onupgradeneeded");
    //       let db = e.target.result;
    //       let objectStore = db.createObjectStore("projects-store", {
    //         autoIncrement: true,
    //         keyPath: "id",
    //       });
    //     };
    //   });
    // },
    // async getSystemsFromDb() {
    //   return new Promise((resolve, reject) => {
    //     let trans = this.db.transaction(["projects-store"], "readonly");
    //     trans.oncomplete = (e) => {
    //       resolve(systems);
    //     };

    //     let store = trans.objectStore("projects-store");
    //     let systems = [];

    //     store.openCursor().onsuccess = (e) => {
    //       let cursor = e.target.result;
    //       if (cursor) {
    //         systems.push(cursor.value);
    //         cursor.continue();
    //       }
    //     };
    //   });
    // },
    // async addCat() {
    //   this.addDisabled = true;
    //   // random cat for now
    //   let cat = {
    //     name: "Cat" + Math.floor(Math.random() * 100),
    //     age: Math.floor(Math.random() * 10) + 1,
    //   };
    //   console.log("about to add " + JSON.stringify(cat));
    //   await this.addToIdb(cat);
    //   this.systems = await this.getSystemsFromDb();
    //   this.addDisabled = false;
    // },
    // async addToIdb(cat) {
    //   return new Promise((resolve, reject) => {
    //     let trans = this.db.transaction(["projects-store"], "readwrite");
    //     trans.oncomplete = (e) => {
    //       resolve();
    //     };

    //     let store = trans.objectStore("projects-store");
    //     store.add(cat);
    //   });
    // },
    // async deleteCat(id) {
    //   await this.deleteFromIdb(id);
    //   this.systems = await this.getSystemsFromDb();
    // },
    // async deleteFromIdb(id) {
    //   return new Promise((resolve, reject) => {
    //     let trans = this.db.transaction(["projects-store"], "readwrite");
    //     trans.oncomplete = (e) => {
    //       resolve();
    //     };

    //     let store = trans.objectStore("projects-store");
    //     store.delete(id);
    //   });
    // },

    /*
    manually remvoe service worker
    */
    // async getDataFromServiceWorker() {
    //   if (indexDB) {
    //     return await readAllData("projects-store").then((data) => {
    //       // if (!networkDataRecieved) {
    //       // }
    //       return data;
    //     });
    //   }
    // },
    projectIcon(name) {
      try {
        if (name == "borhan") throw Error("load png icon instead.");
        else return import(`assets/common/img/logo/${name}.svg`).default;
      } catch (err) {
        try {
          return import(`assets/common/img/logo/${name}.jpg`).default;
        } catch (err) {
          return import("assets/common/img/default.svg").default;
        }
      }
    },
    redirectTo(project) {
      if (project.loading) return;
      project.loading = true;

      // clearBodyClass();
      this.activeSystemSetter(project);

      if (isValidHttpUrl(project.link)) {
        redirectToExternalLink(project.link, true);
        project.loading = false;
      } else {
        this.$router
          .push("/" + project.link)

          .then((res) => {
            project.loading = false;
          });
      }
    },
  },
};
</script>

<style lang="scss" scoped>
@import "assets/auth/signup";

.dashboard-bg {
  // background-image: url('../../../../assets/common/img/main-bg.png');
  background-size: 14em;
  background-position: center;
}

// .modules-selection-page {
//   .navbar {
//     margin-right: 0;

//     .sidebar-toggler {
//       display: none;
//     }
//   }
// }

.dashboard-page {
  height: calc(100vh - 4em);
  // height: calc(100vh - 0px);
  // overflow-y: auto;
  // display: flex;
  // padding: 2em 0;
  //background-color: #f7f7f7;

  .row {
    &.row-gap {
      row-gap: 2em;

      .lds-ring {
        margin-left: 0;
        position: absolute;
        width: 100%;
        height: 100%;
        display: flex;
        justify-content: center;
        align-items: center;
        transform: scale(2);
      }
    }
  }

  .no-text-decoration {
    text-decoration: none;
  }

  &.horizontal {
    padding: 1em;
    .row {
      &.row-gap {
        row-gap: 1em;
      }
    }
  }
  &.list {
    height: auto;
    padding: 0em;
    .row {
      &.row-gap {
        row-gap: 0em;
      }
    }
  }
}
.card {
  background-color: unset !important;
}
</style>