using System.Text.Json.Serialization; namespace GerbilManagerWebAPI.Import { // ---- Source shapes (tools/import/output JSON, produced by extract.py) ---- public sealed class SourceAnimal { public string Id { get; set; } = ""; public string Name { get; set; } = ""; public List NameVariants { get; set; } = new(); public string Dob { get; set; } = ""; public string Death { get; set; } = ""; public string? Gender { get; set; } public string Farbschlag { get; set; } = ""; public List FarbschlagVariants { get; set; } = new(); public SourceGenotype Genotype { get; set; } = new(); public string Zucht { get; set; } = ""; public List ParentRefs { get; set; } = new(); public List Photos { get; set; } = new(); public List SourceFiles { get; set; } = new(); public bool Conflict { get; set; } public SourceLitterRef? LitterRef { get; set; } } public sealed class SourceGenotype { public Dictionary> Mapped8locus { get; set; } = new(); public string RawGenotype { get; set; } = ""; public List UnmappedTokens { get; set; } = new(); } public sealed class SourceParentRef { public string Name { get; set; } = ""; public string Dob { get; set; } = ""; public string RoleGuess { get; set; } = ""; } public sealed class SourceLitterRef { public string LitterId { get; set; } = ""; public string Method { get; set; } = ""; public string Confidence { get; set; } = ""; // "hoch" | "niedrig" | (ambiguous => candidates) public List? Candidates { get; set; } } public sealed class SourceLitter { public string Id { get; set; } = ""; public string LitterId { get; set; } = ""; public string Date { get; set; } = ""; public string DamName { get; set; } = ""; public string SireName { get; set; } = ""; public int? TotalBorn { get; set; } public string Zuchtnummer { get; set; } = ""; public string Note { get; set; } = ""; public List Warnings { get; set; } = new(); } // ---- Report shapes (Julian-readable: counts per category + samples) ---- public sealed record ImportReport( bool Executed, LitterSummary Litters, AnimalSummary Animals, PhotoSummary Photos, IReadOnlyList Samples, IReadOnlyList Notes); public sealed record LitterSummary(int InSource, int Created, int AlreadyImported); public sealed record AnimalSummary( int InSource, int Created, int LinkedToLitter, int FarbschlagMatched, int FarbschlagUnmatched, int AlreadyImported, QuarantineSummary Quarantined); public sealed record QuarantineSummary( int Conflicts, int Stubs, int DateOnlyLinks, int AmbiguousLinks, int Total); public sealed record PhotoSummary(int Attached, int SourceFilesMissing); }