namespace NATS.Server.Benchmark.Tests.Harness;

/// <summary>
/// Captures the results of a single benchmark run against one server.
/// </summary>
public sealed record BenchmarkResult
{
    public required string Name { get; init; }
    public required string ServerType { get; init; }
    public required long TotalMessages { get; init; }
    public required long TotalBytes { get; init; }
    public required TimeSpan Duration { get; init; }

    /// <summary>Latency percentiles in microseconds, if measured.</summary>
    public LatencyPercentiles? Latencies { get; init; }

    public double MessagesPerSecond => TotalMessages / Duration.TotalSeconds;
    public double BytesPerSecond => TotalBytes / Duration.TotalSeconds;
    public double MegabytesPerSecond => BytesPerSecond / (1024.0 * 1024.0);
}

public sealed record LatencyPercentiles(
    double P50Us,
    double P95Us,
    double P99Us,
    double MinUs,
    double MaxUs);
