import {defineStore} from 'pinia'
import {useContentStore} from "~/composables/stores/useContentStore.js";
import templateTypes from "~/data/forms/templates/types.json"
import industryTypes from "~/data/forms/templates/industries.json"

const templatesEndpoint = 'templates'
export const useTemplatesStore = defineStore('templates', () => {

  const contentStore = useContentStore('slug')

  const allLoaded = ref(false)
  const industries = ref(new Map)
  const types = ref(new Map)

  const getTemplateTypes = (slugs) => {
    return slugs.map((slug) => {
      return types.value.get(slug)
    }).filter((item) => item !== undefined)
  }
  const getTemplateIndustries = (slugs) => {
    return slugs.map((slug) => {
      return industries.value.get(slug)
    }).filter((item) => item !== undefined)
  }

  const initTypesAndIndustries = () => {
    if (types.value.size === 0) {
      types.value = new Map(Object.entries(templateTypes))
    }
    if (industries.value.size === 0) {
      industries.value = new Map(Object.entries(industryTypes))
    }
  }

  return {
    ...contentStore,
    industries,
    types,
    allLoaded,
    getTemplateTypes,
    getTemplateIndustries,
    initTypesAndIndustries
  }
})

export const fetchTemplate = (slug, options = {}) => {
  return useOpnApi(templatesEndpoint + '/' + slug, options)
}

export const fetchAllTemplates = (options = {}) => {
  return useOpnApi(templatesEndpoint, options)
}

export const loadAllTemplates = async (store, options={}) => {
  if (!store.allLoaded) {
    store.startLoading()
    store.initTypesAndIndustries()
    const {data,error} = await fetchAllTemplates(options)
    store.set(data.value)
    store.stopLoading()
    store.allLoaded = true
  }
}
