namespace GerbilManagerWebAPI.Dtos
{
    /// <summary>Zählungen für die Analyse-Übersicht (RennmausPro-III-Import).</summary>
    public record Rpro3Counts(
        int OwnAnimals,            // eigene Tiere (stamm)
        int ExternalRaw,           // externe Ahnen (fremd, roh, vor Dedup)
        int ExternalAfterDedup,    // externe Ahnen nach Dedup
        int Litters,               // Würfe
        int Contacts,              // Kontakte (Herkunft + Abnehmer)
        int Genotypes,             // hinterlegte Genotypen (eigen + extern)
        int DuplicatesMerged,      // weggefallene interne Dubletten
        int MergeClusters,         // Anzahl zusammengelegter Cluster
        int Enclosures,            // Gehege/Becken
        int Acquisitions,          // Erwerbe (herktier_tb)
        int Reservations,          // Reservierungen/Abgaben (abgeben_tb + abstat_tb)
        int Returns,               // Rücknahmen (getback_tb)
        int WaitingList,           // Wartelisten-Einträge (nachfrage_tb)
        int Exhibitions);          // Ausstellungsergebnisse (ausz_tb)

    /// <summary>Eine Variante eines mehrdeutigen Namens (für die Entscheidung der Züchterin).</summary>
    public record Rpro3AmbiguousVariant(
        int Count,
        string Dob,
        string Farbe,
        string Origin,
        bool IsOwn);

    public record Rpro3AmbiguousName(
        string Name,
        IReadOnlyList<Rpro3AmbiguousVariant> Variants,
        int BareCount);

    /// <summary>Ein großer sicherer Merge-Cluster (zur Veranschaulichung der Dedup-Wirkung).</summary>
    public record Rpro3MergeSample(
        string Name,
        int RecordCount,
        string Dob,
        string Farbe,
        string Origin);

    /// <summary>Ergebnis von POST /import/rpro3/analyze — schreibt NICHTS in die DB.</summary>
    public record Rpro3AnalyzeResult(
        Rpro3Counts Counts,
        int NewVsCurrentNew,        // wie viele Tiere im aktuellen Stand fehlen würden (neu)
        int NewVsCurrentExisting,   // wie viele schon vorhanden sind (Match)
        IReadOnlyList<Rpro3MergeSample> TopMerges,
        IReadOnlyList<Rpro3AmbiguousName> AmbiguousNames,
        bool PhotosProvided,
        int PhotoFilesAvailable);

    /// <summary>Ergebnis von POST /import/rpro3/execute.</summary>
    public record Rpro3ExecuteResult(
        int GerbilsImported,
        int LittersImported,
        int ContactsImported,
        int HealthRecordsImported,
        int WeightRecordsImported,
        int PhotosImported,
        int EnclosuresImported,
        int AcquisitionsImported,
        int ReservationsImported,
        int ReturnsImported,
        int WaitingListImported,
        int ExhibitionsImported,
        string Message);
}
