using System.ComponentModel.DataAnnotations;

namespace GerbilManagerWebAPI.Models
{
    /// <summary>
    /// WAITLIST (RennmausPro nachfrage_tb): a prospective buyer's standing request for a
    /// future animal with wish criteria (colour, gender). Decoupled from the rest of the
    /// model on purpose — ContactId is a plain nullable Guid column (NOT an enforced
    /// foreign key), so the import re-ingest wipe (IngestResolvedService) can delete and
    /// recreate contacts without deleting or breaking waiting-list rows. The captured
    /// ContactName keeps the entry human-readable even when no contact exists yet (or the
    /// referenced contact is gone). Same survives-the-wipe pattern as Feedback.
    /// </summary>
    public class WaitingListEntry
    {
        [Key]
        public Guid Id { get; set; }

        /// <summary>Loose reference (no FK) to the interested contact, if one exists.</summary>
        public Guid? ContactId { get; set; }

        /// <summary>Free-text name of the interested party (used when no contact is linked).</summary>
        public string? ContactName { get; set; }

        /// <summary>Wished-for colour variety (free text / catalog name), if any.</summary>
        public string? WishColor { get; set; }

        /// <summary>Wished-for gender: "male" | "female" | null (no preference).</summary>
        public string? WishGender { get; set; }

        /// <summary>When the request was made.</summary>
        public DateTime? RequestedAt { get; set; }

        /// <summary>Workflow status: "offen" | "erfuellt" | "storniert".</summary>
        public required string Status { get; set; }

        /// <summary>Optional free-text note.</summary>
        public string? Note { get; set; }

        /// <summary>Server-side creation time.</summary>
        public DateTimeOffset CreatedAt { get; set; }
    }
}
