import { iconCatalogLoaders } from './loaders'

const categoryCache = new Map<string, Promise<Record<string, string>>>()
const catalogLoaders: Record<string, () => Promise<Record<string, string>>> = iconCatalogLoaders

export function hasCatalogCategory(category: string | null | undefined) {
  return !!(category && category in catalogLoaders)
}

export async function loadCatalogCategory(category: string | null | undefined) {
  if (!category || !(category in catalogLoaders)) {
    return null
  }

  const cached = categoryCache.get(category)
  if (cached) {
    return cached
  }

  const loader = catalogLoaders[category]
  const pending = loader()
  categoryCache.set(category, pending)
  return pending
}

export async function loadCatalogIcon(name: string | null | undefined) {
  if (!name || !name.includes('/')) {
    return null
  }

  const category = name.split('/')[0]
  const icons = await loadCatalogCategory(category)
  return icons?.[name] ?? null
}
