import { defineStore } from 'pinia'; import { computed, ref } from 'vue'; import { fetchBusinessCategories } from '@/api/business-categories'; import { fetchBusiness, fetchBusinesses } from '@/api/businesses'; import type { Business } from '@/api/types'; import { MONTIME_BRAND, NIVASH_BRAND, type SiteBrand } from '@/constants/site-branding'; export const useTenantStore = defineStore('tenant', () => { const loaded = ref(false); const loading = ref(false); const isSingleBusiness = ref(false); const singleBusiness = ref(null); const brand = computed(() => { const base = isSingleBusiness.value ? NIVASH_BRAND : MONTIME_BRAND; if (isSingleBusiness.value && singleBusiness.value) { return { ...base, name: singleBusiness.value.title, shortName: singleBusiness.value.title, copyrightName: singleBusiness.value.title, aboutText: singleBusiness.value.description?.trim() || base.aboutText, }; } return base; }); const singleBusinessId = computed(() => singleBusiness.value?.id ?? null); function syncSingleBusiness(business: Business) { if (!isSingleBusiness.value) return; singleBusiness.value = business; } async function bootstrap() { if (loaded.value || loading.value) return; loading.value = true; try { const [categories, businesses] = await Promise.all([ fetchBusinessCategories(), fetchBusinesses({ isActive: true }), ]); const activeCategories = categories.filter((c) => c.isActive); isSingleBusiness.value = activeCategories.length === 1 && businesses.length === 1; if (isSingleBusiness.value) { singleBusiness.value = await fetchBusiness(businesses[0].id); } else { singleBusiness.value = null; } } catch { isSingleBusiness.value = false; singleBusiness.value = null; } finally { loading.value = false; loaded.value = true; } } return { loaded, loading, isSingleBusiness, singleBusiness, singleBusinessId, brand, bootstrap, syncSingleBusiness, }; });