namespace Cleanuparr.Infrastructure.Stats;
///
/// Aggregated application statistics for a timeframe, designed for dashboard integrations.
/// Every section except is scoped to the timeframe and reflects only live activity
/// unless dry-run is explicitly included. is a point-in-time gauge.
///
public class StatsV2Response
{
///
/// The raw event audit for the timeframe: total plus breakdowns by event type and severity.
/// Higher-level sections (strikes, removals, cleaned, searches) are ergonomic roll-ups derived
/// from the same events.
///
public EventV2Stats Events { get; set; } = new();
///
/// Strike activity in the timeframe (issued, by type, recovered).
///
public StrikeV2Stats Strikes { get; set; } = new();
///
/// Downloads removed in the timeframe, broken down by reason. Malware removals are the
/// AllFilesBlocked + AtLeastOneFileBlocked reasons within this breakdown.
///
public RemovalsV2Stats Removals { get; set; } = new();
///
/// Downloads cleaned by the download cleaner in the timeframe, broken down by reason.
///
public CleanedV2Stats Cleaned { get; set; } = new();
///
/// Seeker search activity in the timeframe.
///
public SearchesV2Stats Searches { get; set; } = new();
///
/// Scheduled job run outcomes in the timeframe, overall and per job type.
///
public JobV2Stats Jobs { get; set; } = new();
///
/// Current health of configured download clients and arr instances. This is a cached gauge
/// (updated by a background service roughly every 5 minutes), not a timeframe-scoped metric.
///
public HealthStats Health { get; set; } = new();
///
/// The timeframe the response covers, in hours, echoing the requested value after clamping.
///
public int TimeframeHours { get; set; }
///
/// When this response was generated (UTC).
///
public DateTimeOffset GeneratedAt { get; set; }
}