using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using Data.Models;
using SharedLibraryCore.Dtos;
namespace SharedLibraryCore.Interfaces
{
///
/// Exposes methods to get analytical data about server(s)
///
public interface IServerDataViewer
{
///
/// Retrieves the max concurrent clients over a give time period for all servers or given server id
///
/// ServerId to query on
///
/// how far in the past to search
/// CancellationToken
///
Task<(int?, DateTime?)> MaxConcurrentClientsAsync(long? serverId = null, Reference.Game? gameCode = null, TimeSpan? overPeriod = null,
CancellationToken token = default);
///
/// Gets the total number of clients connected and total clients connected in the given time frame
///
/// how far in the past to search
///
/// CancellationToken
///
Task<(int, int)> ClientCountsAsync(TimeSpan? overPeriod = null, Reference.Game? gameCode = null, CancellationToken token = default);
///
/// Retrieves the client count and history over the given period
///
/// how far in the past to search
/// CancellationToken
///
Task> ClientHistoryAsync(TimeSpan? overPeriod = null,
CancellationToken token = default);
///
/// Retrieves the number of ranked clients for given server id
///
/// ServerId to query on
/// CancellationToken
///
Task RankedClientsCountAsync(long? serverId = null, CancellationToken token = default);
}
}