<template>
  <div>
    <div class="layout__col-2-1">
      <ul class="page-tabs">
        <nuxt-link
          v-for="page in pages"
          :key="page.type"
          v-slot="{ href, navigate, isExactActive }"
          :to="page.to"
        >
          <li
            v-tooltip="!page.navigable ? $t('enterprise.deactivated') : null"
            class="page-tabs__item"
            :class="{
              'page-tabs__item--active': isExactActive,
              'page-tabs__item--disabled': !page.navigable,
            }"
          >
            <a
              :href="page.navigable ? href : null"
              class="page-tabs__link"
              v-on="page.navigable ? { click: navigate } : {}"
            >
              {{ page.name }}
            </a>
          </li>
        </nuxt-link>
      </ul>
    </div>
    <div class="layout__col-2-2">
      <NuxtChild :group="group" />
    </div>
  </div>
</template>

<script>
export default {
  name: 'Settings',
  layout: 'app',
  async asyncData({ store, params, error }) {
    try {
      const group = await store.dispatch(
        'group/selectById',
        parseInt(params.groupId, 10)
      )
      return { group }
    } catch (e) {
      return error({ statusCode: 404, message: 'Group not found.' })
    }
  },
  computed: {
    groupSettingsPageTypes() {
      return Object.values(this.$registry.getAll('groupSettingsPage'))
    },
    pages() {
      // Build an array of settings page types they're permitted to view.
      const permittedPages = this.groupSettingsPageTypes.filter((instance) =>
        instance.hasPermission(this.group)
      )
      return permittedPages.map((instance) => {
        return {
          type: instance.type,
          name: instance.getName(),
          to: instance.getRoute(this.group),
          navigable: instance.isFeatureActive(this.group),
        }
      })
    },
  },
  mounted() {
    this.$bus.$on('group-deleted', this.groupDeleted)
  },
  beforeDestroy() {
    this.$bus.$off('group-deleted', this.groupDeleted)
  },
  methods: {
    groupDeleted() {
      this.$nuxt.$router.push({ name: 'dashboard' })
    },
  },
}
</script>