using DigitalData.EmailProfilerDispatcher.Abstraction.Attributes;
using EnvelopeGenerator.Application.Envelopes.Queries.Read;
using EnvelopeGenerator.Application.Receivers.Queries.Read;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace EnvelopeGenerator.Application.EnvelopeReceivers.Queries.Read;
///
/// Repräsentiert die Antwort für das Lesen eines Envelope-Empfängers.
///
///
/// Diese Klasse enthält Informationen über einen spezifischen Empfänger eines Umschlags (Envelope).
/// Sie verknüpft die Empfängerinformationen mit den zugehörigen Umschlagsdaten und bietet zusätzliche Metadaten.
///
/// Die eindeutige Kennung des Benutzers, der den Empfänger erstellt hat.
/// Der Status des Empfängers als numerischer Wert.
public record ReadEnvelopeReceiverResponse(int UserId, int Status)
{
///
/// Gibt die zusammengesetzte Kennung des Empfängers zurück, bestehend aus der Umschlags-ID und der Empfänger-ID.
///
///
/// Diese Eigenschaft kombiniert die eindeutige Kennung des Umschlags (EnvelopeId) und die des Empfängers (ReceiverId)
/// zu einer einzigen, leicht zugänglichen Struktur.
///
[NotMapped]
public (int Envelope, int Receiver) Id => (Envelope: EnvelopeId, Receiver: ReceiverId);
///
/// Die eindeutige Kennung des zugehörigen Umschlags.
///
[Required]
public int EnvelopeId { get; init; }
///
/// Die eindeutige Kennung des Empfängers.
///
[Required]
public int ReceiverId { get; init; }
///
/// Die Reihenfolge des Empfängers innerhalb des Umschlags.
///
public int Sequence { get; init; }
///
/// Der Name des Empfängers. Kann als Platzhalter verwendet werden.
///
[TemplatePlaceholder("[NAME_RECEIVER]")]
public string? Name { get; init; }
///
/// Die Berufsbezeichnung des Empfängers.
///
public string? JobTitle { get; init; }
///
/// Der Firmenname des Empfängers.
///
public string? CompanyName { get; init; }
///
/// Eine private Nachricht, die mit dem Empfänger verknüpft ist.
///
public string? PrivateMessage { get; init; }
///
/// Das Datum und die Uhrzeit, wann der Empfänger hinzugefügt wurde.
///
public DateTime AddedWhen { get; init; }
///
/// Das Datum und die Uhrzeit, wann der Empfänger zuletzt geändert wurde (falls vorhanden).
///
public DateTime? ChangedWhen { get; init; }
///
/// Gibt an, ob der Empfänger eine Telefonnummer hat.
///
public bool HasPhoneNumber { get; init; }
///
/// Die zugehörigen Umschlagsdaten.
///
[Required]
public required ReadEnvelopeResponse Envelope { get; init; }
///
/// Die Liste der Empfängerinformationen.
///
[Required]
public IEnumerable Receiver { get; init; } = new List();
}