using AsbCloudApp.Data;
using System;
using System.Collections.Generic;

namespace AsbCloudApp.Services;

/// <summary>
/// Отслеживание и сбор статистики по запросам
/// </summary>
public interface IRequerstTrackerService
{
    /// <summary>
    /// Регистрирует новый запрос
    /// </summary>
    /// <param name="requestLog"></param>
    void RegisterRequest(RequestLogDto requestLog);

    /// <summary>
    /// Регистрирует новый запрос, вызвавший ошибку на сервере
    /// </summary>
    /// <param name="requestLog"></param>
    /// <param name="ex"></param>
    void RegisterRequestError(RequestLogDto requestLog, Exception ex);

    /// <summary>
    /// все зарегистрированные запросы
    /// </summary>
    /// <param name="take"></param>
    /// <returns></returns>
    IEnumerable<RequestLogDto> GetAll(int? take);

    /// <summary>
    /// запросы которые выполнялись быстро
    /// </summary>
    /// <param name="take"></param>
    /// <returns></returns>
    IEnumerable<RequestLogDto> GetFast(int? take);

    /// <summary>
    /// запросы, которые выполнялись медленно
    /// </summary>
    /// <param name="take"></param>
    /// <returns></returns>
    IEnumerable<RequestLogDto> GetSlow(int? take);

    /// <summary>
    /// запросы, которые завершились ошибкой
    /// </summary>
    /// <param name="take"></param>
    /// <returns></returns>
    IEnumerable<RequestLogDto> GetError(int? take);

    /// <summary>
    /// Статистика посещений пользователей
    /// </summary>
    /// <param name="take"></param>
    /// <returns></returns>
    IEnumerable<RequestLogUserDto> GetUsersStat(int? take);
}