const SEARCH_GROUP_FIELD = 'redocly_category';
const SEARCH_GROUP_NAME_API = 'API Reference';

export function setDocumentSearchFacets(
  actions: any,
  documentSearchFacets: { [key: string]: string | Set<string> },
) {
  const searchFacets = actions.getSearchFacets();

  for (const [key, value] of Object.entries(documentSearchFacets)) {
    const facet = searchFacets.get(key);
    if (facet) {
      const facetValues = new Set((facet.values as string[]) ?? []);
      if (value instanceof Set) {
        [...value].forEach((v) => (facet.values = Array.from(facetValues.add(v))));
      } else {
        facet.values = Array.from(facetValues.add(value));
      }
    }
  }

  actions.setSearchFacets(searchFacets);
}

export function extractDocumentSearchFacets(
  actions: any,
  metadata?: Record<string, unknown>,
): { [key: string]: string } {
  const searchFacets: { [key: string]: string } = {
    [SEARCH_GROUP_FIELD]: SEARCH_GROUP_NAME_API,
  };

  if (!metadata) return searchFacets;

  const targetSearchFacets = actions.getSearchFacets();

  for (const [key, value] of Object.entries(metadata)) {
    if (!targetSearchFacets.has(key)) continue;

    searchFacets[key] = String(value);
  }

  return searchFacets;
}
