public interface IBatchEventService
{
    /// <summary>
    /// Returns cursor-paginated audit trail events for a batch.
    /// Events are ordered by OccurredAt ascending (oldest first).
    /// </summary>
    /// <param name="batchId">The batch to query events for.</param>
    /// <param name="after">Cursor: ISO-8601 timestamp. Only events after this timestamp are returned.</param>
    /// <param name="pageSize">Number of events per page. Default 50, max 200.</param>
    Task<CursorPagedResult<BatchEventResponse>> GetEventsAsync(
        Guid batchId, DateTimeOffset? after, int pageSize);
}