import { serviceCatalog } from "@/content/catalog";
import { resourceCatalog } from "@/content/resources/catalog";
import { resourceArticles } from "@/content/resources";
import { serviceContents } from "@/content/services";
import type { ResourceArticle, ResourceSlug, ServiceContent, ServiceSlug } from "@/content/types";
import { readingMinutes } from "@/lib/text";

/**
 * Content access layer. Pages and components read content only through these functions,
 * so a headless CMS can replace the local modules without touching the UI.
 */

export function getServices(): ServiceContent[] {
  return serviceCatalog
    .map((summary) => serviceContents.find((service) => service.slug === summary.slug))
    .filter((service): service is ServiceContent => Boolean(service));
}

export function getService(slug: string): ServiceContent | undefined {
  return serviceContents.find((service) => service.slug === slug);
}

export function getResources(): ResourceArticle[] {
  return resourceCatalog
    .map((summary) => resourceArticles.find((article) => article.slug === summary.slug))
    .filter((article): article is ResourceArticle => Boolean(article));
}

export function getResource(slug: string): ResourceArticle | undefined {
  return resourceArticles.find((article) => article.slug === slug);
}

export function getResourceReadTimes(): Partial<Record<ResourceSlug, number>> {
  return Object.fromEntries(resourceArticles.map((article) => [article.slug, readingMinutes(article.body)]));
}

export function isServiceSlug(value: string): value is ServiceSlug {
  return serviceCatalog.some((service) => service.slug === value);
}
