<template>
  <FormGroup :label="t('showMeta.categories')" custom-control :is-saving="categories.isSaving">
    <ComboBoxSimple v-model="categories.value" :choices="categories.choices">
      <template #selected="{ deselect }">
        <Tag
          v-for="category in categories.value"
          :key="category.id"
          removable
          @remove="deselect(category)"
        >
          <span>
            <span class="tw-block">{{ category.name }}</span>
            <span v-if="category.subtitle.trim()" class="tw-text-xs">
              {{ category.subtitle }}
            </span>
          </span>
        </Tag>
      </template>
    </ComboBoxSimple>
  </FormGroup>

  <FormGroup :label="t('showMeta.topics')" custom-control :is-saving="topics.isSaving">
    <ComboBoxSimple v-model="topics.value" :choices="topics.choices" />
  </FormGroup>

  <FormGroup :label="t('showMeta.genres')" custom-control :is-saving="musicFocuses.isSaving">
    <ComboBoxSimple v-model="musicFocuses.value" :choices="musicFocuses.choices" />
  </FormGroup>

  <FormGroup :label="t('showMeta.languages')" custom-control :is-saving="languages.isSaving">
    <ComboBoxSimple v-model="languages.value" :choices="languages.choices" />
  </FormGroup>

  <FormGroup :label="t('showMeta.hosts')" custom-control :is-saving="hosts.isSaving">
    <ComboBoxSimple v-model="hosts.value" :choices="hosts.choices" />
  </FormGroup>
</template>

<script setup lang="ts">
import { computed } from 'vue'

import { Show } from '@/types'
import {
  useCategoryStore,
  useHostStore,
  useLanguageStore,
  useMusicFocusStore,
  useShowStore,
  useTopicStore,
} from '@/stores'
import { useI18n } from '@/i18n'
import { useRelationList } from '@/form'
import FormGroup from '@/components/generic/FormGroup.vue'
import Tag from '@/components/generic/Tag.vue'
import ComboBoxSimple from '@/components/ComboBoxSimple.vue'

const props = defineProps<{
  show: Show
}>()

const { t } = useI18n()
const showStore = useShowStore()
const categoryStore = useCategoryStore()
const topicStore = useTopicStore()
const musicFocusStore = useMusicFocusStore()
const languageStore = useLanguageStore()
const hostStore = useHostStore()

const show = computed(() => props.show)
const categories = useRelationList(showStore, show, 'categoryIds', categoryStore)
const topics = useRelationList(showStore, show, 'topicIds', topicStore)
const languages = useRelationList(showStore, show, 'languageIds', languageStore)
const hosts = useRelationList(showStore, show, 'hostIds', hostStore)
const musicFocuses = useRelationList(showStore, show, 'musicFocusIds', musicFocusStore)
</script>