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);
    }
}