using EnvelopeGenerator.Application.Envelopes;
using EnvelopeGenerator.Application.Receivers;
using static EnvelopeGenerator.Common.Constants;
namespace EnvelopeGenerator.Application.EnvelopeHistories;
///
/// Repräsentiert eine Abfrage für die Verlaufshistorie eines Umschlags.
///
/// Die eindeutige Kennung des Umschlags.
/// Die Abfrage, die den Umschlag beschreibt.
/// Die Abfrage, die den Empfänger beschreibt.
/// Die Abfrage, die den Status des Umschlags beschreibt.
public record EnvelopeHistoryQuery(int EnvelopeId, TEnvelopeQuery? Envelope, TReceiverQuery? Receiver = null, StatusQuery? Status = null)
where TEnvelopeQuery : EnvelopeQuery
where TReceiverQuery : ReceiverQuery
{
///
/// Gibt den Referenztyp des Umschlags an.
/// Wenn der Benutzer des Umschlags definiert ist, wird der Referenztyp als Empfänger betrachtet.
/// Andernfalls, wenn ein Empfänger definiert ist, wird der Referenztyp ebenfalls als Empfänger betrachtet.
/// Ist keiner von beiden definiert, wird der Referenztyp als System betrachtet.
///
public ReferenceType ReferenceType =>
Envelope?.Sender is not null
? ReferenceType.Receiver
: Receiver is not null
? ReferenceType.Receiver
: ReferenceType.System;
}