namespace Shared.Operations;

public sealed record WorkItemProjection(
    Guid Id,
    string SourceModule,
    string SourceType,
    string SourceId,
    string ReferenceNo,
    string? SourceScreenId,
    string Code,
    string Title,
    string? Detail,
    string Severity,
    string Status,
    string? OwnerId,
    string? OwnerName,
    DateTimeOffset OccurredAt,
    DateTimeOffset? DueAt,
    int AgeMinutes,
    long Version,
    string ContextJson,
    string? RetryActionKey,
    bool AllowManualResolution);

public sealed record WorkQueueCounter(string Key, string Label, int Count, string Severity);
public sealed record WorkItemActionDto(string Id, string Label, string Kind, string? Permission = null, bool Danger = false);
public sealed record WorkItemDto(
    Guid Id, string SourceModule, string SourceType, string SourceId, string ReferenceNo, string? SourceScreenId, string Code, string Title, string? Detail,
    string Severity, string Status, string? OwnerId, string? OwnerName, DateTimeOffset OccurredAt,
    DateTimeOffset? DueAt, int AgeMinutes, long Version, object Context, IReadOnlyList<WorkItemActionDto> Actions);
public sealed record WorkQueueResponse(IReadOnlyList<WorkItemDto> Items, int TotalCount, IReadOnlyList<WorkQueueCounter> Counters);

public sealed record ReconcileItemDto(
    Guid Id, string ReconcileType, string ReferenceNo, string SourceLabel, string TargetLabel,
    string ExpectedValue, string ActualValue, string? DifferenceValue, string? ReasonCode, string? ReasonText,
    string Status, DateTimeOffset OccurredAt, string? SourceId, string? TargetId, long Version);
public sealed record ReconcileSummary(int TotalCount, int MatchedCount, int MismatchCount, int PendingCount, int ResolvedCount);
public sealed record ReconcileResponse(IReadOnlyList<ReconcileItemDto> Items, ReconcileSummary Summary);
