<template>
  <q-expansion-item
    v-if="isGranted(entry)"
    clickable
    :label="getTitle(entry)"
    :icon="entry.icon"
    expand-separator
  >
    <q-list class="q-ml-lg">
      <div v-for="child in entry.children" :key="child.link">
        <q-item v-if="isGranted(child)" clickable :to="{ name: child.link }">
          <q-menu context-menu>
            <q-btn v-close-popup label="Verknüpfung erstellen" dense @click="addShortCut(child)" />
          </q-menu>
          <q-item-section avatar>
            <q-icon :name="child.icon" />
          </q-item-section>
          <q-item-section>
            <q-item-label>
              {{ getTitle(child) }}
            </q-item-label>
          </q-item-section>
        </q-item>
      </div>
    </q-list>
  </q-expansion-item>
</template>

<script lang="ts">
import { defineComponent, PropType } from 'vue';
import { FG_Plugin } from '@flaschengeist/types';
import { useMainStore } from 'app/api';

export default defineComponent({
  name: 'EssentialExpansionLink',
  components: {},
  props: {
    entry: {
      type: Object as PropType<FG_Plugin.MenuLink>,
      required: true,
    },
  },
  emits: {
    addShortCut: (val: FG_Plugin.MenuLink) => val.link,
  },
  setup(props, { emit }) {
    const store = useMainStore();

    function isGranted(val: FG_Plugin.MenuLink) {
      return !val.permissions || val.permissions.every((p) => store.permissions.includes(p));
    }
    function getTitle(entry: FG_Plugin.MenuLink) {
      return typeof entry.title === 'function' ? entry.title() : entry.title;
    }

    function addShortCut(val: FG_Plugin.MenuLink) {
      emit('addShortCut', val);
    }

    return { isGranted, getTitle, addShortCut };
  },
});
</script>