using PARR.Domain.DTOs.RobotMetrics;
using PARR.Domain.Enums;

namespace PARR.Core.Services.RobotMetrics
{
    /// <summary>
    /// Отчетность по метрикам заданий и работы роботов. 
    /// </summary>
    public interface IRobotMetricsService
    {
        /// <summary>
        /// Статистика по Заданиям Роботу
        /// </summary>
        /// <param name="robotCode"></param>
        /// <param name="period"></param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        Task<List<RobotStatusChartPoint>> GetRobotStatusMetricsAsync(RobotsEnum robotCode, ChartPeriod period, CancellationToken cancellationToken);

        /// <summary>
        /// Статистика по Статусам Заданий
        /// </summary>
        /// <param name="robotCode"></param>
        /// <param name="period"></param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        Task<List<TaskStatusChartPoint>> GetTaskStatusMetricsAsync(RobotsEnum robotCode, ChartPeriod period, CancellationToken cancellationToken);

        /// <summary>
        /// Статистика с применением гибких фильтров
        /// </summary>
        /// <param name="filter"></param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        Task<List<FilteredChartPoint>> GetFilteredMetricsAsync(MetricFilter filter, CancellationToken cancellationToken);
    }
}
