using System.ComponentModel.DataAnnotations;

namespace GerbilManagerWebAPI.Models
{
    /// <summary>
    /// RÜCKNAHME (RPRO3 getback_tb): ein bereits abgegebenes Tier kommt zur Züchterin
    /// zurück. Bewusst vom restlichen Modell entkoppelt — GerbilId/FromContactId sind
    /// einfache nullable Guid-Spalten (KEINE Foreign Keys), genau wie bei <see cref="Feedback"/>.
    /// Dadurch überleben Rücknahmen den Import-Re-Ingest-Wipe (IngestResolvedService löscht
    /// Gerbils/Contacts, ohne diese Tabelle anzufassen). Der erfasste GerbilName hält den
    /// Datensatz auch dann lesbar, wenn das referenzierte Tier neu eingespielt/entfernt wurde.
    /// </summary>
    public class ReturnRecord
    {
        [Key]
        public Guid Id { get; set; }

        /// <summary>Lose Referenz (kein FK) auf das zurückgekommene Tier (_TID).</summary>
        public Guid? GerbilId { get; set; }

        /// <summary>Erfasster Tiername — überlebt einen Ingest-Wipe (bleibt lesbar).</summary>
        public string? GerbilName { get; set; }

        /// <summary>Rücknahmedatum (_ZAM).</summary>
        public DateTime? ReturnDate { get; set; }

        /// <summary>Rücknahmepreis (_ZPREIS) — was die Züchterin bei der Rücknahme zahlte/erstattete.</summary>
        public decimal? ReturnPrice { get; set; }

        /// <summary>Ursprünglicher Abgabepreis (_PREIS), zur Historie mitgeführt.</summary>
        public decimal? OriginalPrice { get; set; }

        /// <summary>Ursprüngliches Abgabedatum (_AM), zur Historie mitgeführt.</summary>
        public DateTime? OriginalSaleDate { get; set; }

        /// <summary>Lose Referenz (kein FK) auf den Kontakt, von dem das Tier zurückkam (_ABN).</summary>
        public Guid? FromContactId { get; set; }

        /// <summary>Erfasster Kontaktname — überlebt einen Ingest-Wipe (bleibt lesbar).</summary>
        public string? FromContactName { get; set; }

        /// <summary>Freitext-Grund/Notiz zur Rücknahme (_BEM).</summary>
        public string? Note { get; set; }

        /// <summary>Server-seitige Anlagezeit.</summary>
        public DateTimeOffset CreatedAt { get; set; }
    }
}
