/**
 * FEAT-4: Datenmodell des Ahnenbaums (Stammbaum).
 *
 * Reines TypeScript-Modul ohne React/DOM — testbar und sprachneutral
 * (deutsche Texte kommen ausschließlich aus de.ts, in der UI-Schicht).
 */
import type { Gerbil, Litter } from '../api/types'

/**
 * Datenquelle für die Traversierung. In der App von einer gecachten
 * API-Implementierung erfüllt (source.ts); in Tests von In-Memory-Maps.
 * `null` = nicht vorhanden (z. B. 404) → wird als „unbekannt“ gerendert.
 */
export interface PedigreeSource {
  getGerbil(id: string): Promise<Gerbil | null>
  getLitter(id: string): Promise<Litter | null>
}

/**
 * Position eines Knotens im Ahnenbaum: '' = Wurzeltier, danach pro Generation
 * ein Buchstabe — 'v' = Vater, 'm' = Mutter. Beispiel: 'vm' = Großmutter
 * väterlicherseits. Der Pfad ist der eindeutige Schlüssel einer POSITION;
 * dasselbe Tier kann (bei Inzucht) an mehreren Positionen stehen.
 */
export type PedigreePath = string

export type PedigreeNode = AnimalNode | UnknownNode

export interface AnimalNode {
  readonly kind: 'animal'
  readonly path: PedigreePath
  readonly gerbil: Gerbil
  /**
   * Eltern: entweder BEIDE gesetzt (geladen; ggf. „unbekannt“-Platzhalter)
   * oder BEIDE undefined (Ladegrenze der aktuellen Generationstiefe).
   */
  readonly father?: PedigreeNode
  readonly mother?: PedigreeNode
  /** True: Tier hat einen Wurf, dessen Eltern noch nachgeladen werden können. */
  readonly expandable: boolean
}

/**
 * Platzhalter für einen unbekannten Vorfahren. Hält die Geometrie der
 * Ahnentafel symmetrisch (Zertifikats-Optik), hat selbst keine Eltern.
 */
export interface UnknownNode {
  readonly kind: 'unknown'
  readonly path: PedigreePath
}
