using System.ComponentModel.DataAnnotations;

namespace GerbilManagerWebAPI.Models
{
    /// <summary>
    /// Ein erzeugter Abgabevertrag (FEAT-13). Die .docx liegt wie die Fotos im
    /// Datei-Root (Contracts:RootPath bzw. contract-storage/), in der DB steht
    /// nur der Dateiname. Tiere hängen über <see cref="SaleContractAnimal"/>
    /// (Join-Entity statt uuid[]-Spalte: referenzielle Integrität, „Verträge
    /// eines Tieres“ bleibt abfragbar, und pro Tier-Zeile ist später Platz für
    /// Zusatzdaten wie den Einzelpreis).
    /// </summary>
    public class SaleContract
    {
        [Key]
        public Guid Id { get; set; }

        /// <summary>Abnehmer (Käufer-Block des Vertrags).</summary>
        public Guid ContactId { get; set; }
        public Contact? Contact { get; set; }

        /// <summary>Kaufpreis in Euro (gesamt).</summary>
        public decimal Price { get; set; }

        public DateOnly HandoverDate { get; set; }

        /// <summary>Datum der Unterschriftszeile (Standard: Übergabedatum).</summary>
        public DateOnly ContractDate { get; set; }

        /// <summary>Dateiname der erzeugten .docx im Vertrags-Dateiroot.</summary>
        public required string FileName { get; set; }

        public DateTimeOffset CreatedAt { get; set; }

        public List<SaleContractAnimal> Animals { get; set; } = [];
    }

    /// <summary>Join-Zeile Vertrag ↔ Tier (zusammengesetzter Schlüssel).</summary>
    public class SaleContractAnimal
    {
        public Guid SaleContractId { get; set; }
        public Guid GerbilId { get; set; }
        public Gerbil? Gerbil { get; set; }
    }
}
