import type { Locale } from "../i18n/config";

// Kategoriedaten kommen seit 02.08.2026 aus src/content/categories/*.json — eine Datei pro
// Hauptkategorie, inkl. verschachtelter Unterkategorien. Im Admin-Bereich (/admin/, Sveltia
// CMS) kann VanVan Name/Beschreibung ändern und neue Unterkategorien ergänzen, ohne Code
// anzufassen. `order` bestimmt die Reihenfolge (Dateien in einem Ordner haben von sich aus
// keine garantierte Reihenfolge).

type LocalizedText = Record<Locale, string>;

// Ein einzelner Charakter innerhalb einer Tier-Familie (z.B. "HasiDog" innerhalb der
// Unterkategorie "Hase"). Jede Familie kann beliebig viele Charaktere haben — die Seite
// "wächst" automatisch mit, wenn VanVan hier neue Charaktere ergänzt.
export interface Character {
  slug: string;
  name: LocalizedText;
  // Persönliche Vorstellung des Charakters — wird als eigene Box mit abwechselnder
  // Foto-/Text-Seite auf der Unterkategorie-Seite angezeigt.
  vorstellung?: LocalizedText;
  // Optionales Ziel für einen "Mehr über ..."-Button (z.B. HasiDog hat eine eigene Seite).
  mehrLink?: string;
}

export interface Subcategory {
  slug: string;
  name: LocalizedText;
  // Überschreibt NUR die große Überschrift im Banner oben auf der Unterkategorie-Seite (Breadcrumb,
  // Navigations-Chips etc. zeigen weiterhin `name`) — z.B. um bei "Hase" statt des Familiennamens
  // gezielt den bekanntesten Charakter ("HasiDog") ins Rampenlicht zu stellen. Optional; ohne
  // Angabe verhält sich die Seite wie bisher (zeigt `name`).
  bannerName?: LocalizedText;
  // Ein oder mehrere Charaktere dieser Tier-Familie — jeder bekommt seine eigene Box auf der
  // Unterkategorie-Seite (Foto/Text abwechselnd links/rechts), verknüpft mit dem passenden
  // Produkt über Product.charakter (siehe products.ts).
  characters?: Character[];
}

export interface Category {
  slug: string;
  order: number;
  name: LocalizedText;
  description: LocalizedText;
  icon: string; // dezentes Emoji als Platzhalter-Icon, bis es echte Icons/Fotos gibt
  subcategories?: Subcategory[];
}

const modules = import.meta.glob("/src/content/categories/*.json", { eager: true }) as Record<
  string,
  { default: Category }
>;

export const categories: Category[] = Object.values(modules)
  .map((m) => m.default)
  .sort((a, b) => a.order - b.order);

export function getCategory(slug: string): Category | undefined {
  return categories.find((c) => c.slug === slug);
}

export function getSubcategory(categorySlug: string, subSlug: string): Subcategory | undefined {
  return getCategory(categorySlug)?.subcategories?.find((s) => s.slug === subSlug);
}

const ZITATZEICHEN: Record<Locale, [string, string]> = {
  de: ["„", "”"],
  en: ['"', '"'],
  ch: ["„", "”"],
  fr: ["« ", " »"],
};

// Freundliches Kurz-Label für die Unterkategorien-Chips (z.B. "Hase „HasiDog"") — nennt neben
// dem Familiennamen den ersten/bekanntesten Charakter der Serie, auch wenn die Seite selbst
// inzwischen mehrere Charaktere zeigen kann (siehe Subcategory.characters).
export function subcategoryChipLabel(sub: Subcategory, lang: Locale): string {
  const erster = sub.characters?.[0];
  if (!erster) return sub.name[lang];
  const [auf, zu] = ZITATZEICHEN[lang];
  return `${sub.name[lang]} ${auf}${erster.name[lang]}${zu}`;
}
