namespace Kbx.Shared.Runtime;

public enum KbxRuntimeMode { Normal, Degraded, ReadOnly, Offline }
public enum KbxOperationStatus { Queued, Running, Completed, PartiallyCompleted, Failed, Cancelled }

public sealed record KbxRequestContext(
    Guid? TenantId,
    Guid? UserId,
    string? ScreenId,
    string CorrelationId,
    string? RequestId);

public sealed record KbxRuntimeNotice(
    KbxRuntimeMode Mode,
    string Title,
    string? Message,
    DateTimeOffset? Since,
    string? CorrelationId,
    bool RetryAllowed);

public sealed record KbxOperationRunDto(
    Guid Id,
    string Type,
    string Title,
    string? SourceScreenId,
    string Status,
    DateTimeOffset RequestedAt,
    DateTimeOffset? StartedAt,
    DateTimeOffset? CompletedAt,
    long Processed,
    long? Total,
    long Succeeded,
    long Failed,
    string? CorrelationId,
    string? ResultMessage);

public sealed record KbxUserNotificationDto(
    Guid Id,
    string Severity,
    string Title,
    string? Message,
    DateTimeOffset CreatedAt,
    DateTimeOffset? ReadAt,
    string? ScreenId,
    string? EntityType,
    string? EntityId,
    string? ActionJson);
