<template>
  <div id="app">
    <router-view />
  </div>
</template>

<script>
import {
  mapActions,
  mapGetters,
} from 'vuex';
import { DomainApi } from '@openapi/idm';

export default {
  /**
   * (Для работы шрифта с иконками - /src/styles/icons/pgs)
   * Добавление обработчика для подключения кастомных иконок из
   * шрифтов. Если хотим подключить свою иконку, она должна иметь префикс pgs-
   * система автоматом поставит необходимые классы и подключит иконку.
   * Стили и шрифт находятся в папке src/css
   */
  created () {
    this.$q.iconMapFn = (iconName) => {
      if (iconName.startsWith('pgs-') === true) {
        const name = iconName
        return {
          cls: 'pgs-icon ' + name
        }
      }
    }
    this.loadDictionaries();
    this.loadDomainInfo();
    this.startPollingMenuCounters();
  },
  destroyed () {
    this.stopPolling();
  },
  computed: {
    ...mapGetters('oidcClient', [
      'isLoggedIn', 'currentUser'
    ]),
    ...mapGetters('ervuDictionaries', [
      'initialized',
    ]),
  },
  watch: {
    isLoggedIn: function(isLoggedIn) {
      this.loadDictionaries(isLoggedIn);
      if (isLoggedIn) {
        // нужен 'override' так как this.isLoggedIn будет
        // иметь старое значение внутри этого метода
        this.startPollingMenuCounters(isLoggedIn);
      } else {
        this.stopPolling();
      }
      this.loadDomainInfo(isLoggedIn);
    },
  },
  methods: {
    ...mapActions('ervuDictionaries', [
      'initialize',
    ]),
    ...mapActions('menuCounters', [
      'startPolling',
      'stopPolling',
    ]),
    // ...mapActions('idm/organizations', ['getOrganization']),
    loadDictionaries(override) {
      if ((this.isLoggedIn || override) && this.initialized === false) {
        this.initialize();
      }
    },
    startPollingMenuCounters(override) {
      if (this.isLoggedIn || override) {
        this.startPolling();
      }
    },
    // TODO: тут явно что-то не так, не учли что вызов этого метода
    // может произойти когда пользователь ещё не залогинился
    // но разбираться с этим у меня времени сейчас нет
    loadDomainInfo() {
      const domainApi = new DomainApi();
      domainApi.getDomain(this.currentUser?.domain_id).then(response => {
        this.$store.commit('idm/organizations/organizationsCard', response.data)
      })
    }
  },
}
</script>
