namespace GerbilManagerWebAPI.Dtos
{
/// FEEDBACK: payload for POST /feedback (the "Fehler melden" dialog).
public record FeedbackInput(
string Message,
string Context,
Guid? GerbilId,
Guid? LitterId,
Guid? ContactId,
string? EntityName,
string? Url,
DateTimeOffset? ClientTimestamp);
///
/// FEEDBACK: one past Q&A turn in the ticket's thread/history.
/// Role is "maintainer" (Rückfrage) or "breeder" (Antwort).
///
public record FeedbackThreadEntry(
string Role,
string Text,
DateTimeOffset? At);
/// FEEDBACK: response DTO for a stored report.
public record FeedbackDto(
Guid Id,
string Message,
string Context,
Guid? GerbilId,
Guid? LitterId,
Guid? ContactId,
string? EntityName,
string? Url,
DateTimeOffset? ClientTimestamp,
string? UserAgent,
DateTimeOffset CreatedAt,
string Status,
DateTimeOffset? ResolvedAt,
string? Question,
string? Answer,
DateTimeOffset? AnsweredAt,
/// Breeder-friendly changelog written on resolve (shown in the UI).
string? FixNote,
/// INTERNAL agent working memory — exposed for tooling, NEVER shown to the breeder.
string? AgentContext,
/// Earlier Q&A rounds, oldest first; the current open exchange stays in Question/Answer.
IReadOnlyList Thread,
/// When a genuinely-resolved ticket (no pending Rückfrage) was reopened; else null.
DateTimeOffset? ReopenedAt = null,
/// Soft-delete marker: when the ticket was deleted via the UI (recoverable); else null.
DateTimeOffset? DeletedAt = null,
/// Optional AI-set category/topic for filtering (e.g. "Genetik", "Import"); null = none.
string? Category = null,
/// Was the resolution helpful? true=👍, false=👎, null=no feedback yet.
bool? Helpful = null);
///
/// FEEDBACK: payload for PUT /feedback/{id}. Edit the message and/or toggle status,
/// attach a clarifying question (Rückfrage), submit the breeder's answer, set the
/// breeder-friendly fix note (changelog), or update the internal agent context.
///
public record FeedbackUpdate(
string? Message,
string? Status,
string? Question,
string? Answer,
string? FixNote,
string? AgentContext,
/// Set/clear the ticket category. Empty/whitespace clears it.
string? Category = null,
/// 👍/👎 on a resolved ticket. null leaves it unchanged.
bool? Helpful = null);
}