/**
 * Live-Projektzahl für die Statistik-Zeile im Hero.
 *
 * Quelle: GET /api/projects (contact-api-Container) – zählt serverseitig die
 * Repositories, die aktuell in Gitea (git.webklar.com) liegen, angereichert um
 * die Hosting-Metadaten aus Appwrite. Der Gitea-Token bleibt dadurch auf dem
 * Server. Die Antwort enthält mehr Felder als hier genutzt werden; für die
 * Homepage ist nur `total` relevant.
 */

export type ProjectsSnapshot = {
  /** Zeitpunkt, zu dem der Server-Snapshot erzeugt wurde (ISO) */
  generatedAt: string;
  /** Anzahl der Repositories, die aktuell in Gitea existieren */
  total: number;
  counts: Record<string, number>;
  source: string;
};

const API_URL = import.meta.env.VITE_PROJECTS_API ?? "/api/projects";

export async function fetchProjects(signal?: AbortSignal): Promise<ProjectsSnapshot> {
  const res = await fetch(API_URL, { signal, headers: { Accept: "application/json" } });
  if (!res.ok) throw new Error(`Projektzahl konnte nicht geladen werden (HTTP ${res.status})`);
  const data = (await res.json()) as ProjectsSnapshot;
  if (typeof data?.total !== "number") throw new Error("Unerwartete Antwort der Projekt-API");
  return data;
}
