using Microsoft.Extensions.Primitives;
using PARR.Domain.DTOs.Workload;
using PARR.Domain.Enums.Workload;

namespace PARR.Core.Services.Workload.Interfaces
{
    /// <summary>
    /// Сервис формирования отчетности о загруженности
    /// </summary>
    public interface IWorkloadService
    {
        /// <summary>
        /// Получить статус кэш/отчета
        /// </summary>
        /// <returns></returns>
        Task<WorkloadCacheInfo> GetReportInfoAsync();

        /// <summary>
        /// Получить отчет о загруженности
        /// </summary>
        /// <param name="reportType"></param>
        /// <param name="dateStart"></param>
        /// <param name="durationDays"></param>
        /// <param name="offset"></param>
        /// <param name="responseArea"></param>
        /// <param name="workGroup"></param>
        /// <returns></returns>
        Task<WorkloadReport?> GetWorkloadReportAsync(WorkloadReportType reportType, DateOnly dateStart, int durationDays, TimeSpan offset, string? responseArea, string? workGroup);

        /// <summary>
        /// Получить отчет - список шаблонов на дату согласно фильтрам
        /// </summary>
        /// <param name="reportType"></param>
        /// <param name="filter">Фильтр, значение в зависимости от reportType</param>
        /// <param name="state"></param>
        /// <param name="date"></param>
        /// <param name="offset"></param>
        /// <param name="responseArea">Дополнительный фильтр при отчете по шаблонам, ЗО</param>
        /// <param name="workGorup">Дополнительный фильтр при отчете по шаблонам, РГ</param>
        /// <returns></returns>
        Task<List<WorkloadTemplateReport>> GetTemplateReportAsync(
            WorkloadTemplateReportType reportType, 
            string filter, 
            WorkloadTemplateReportState state, 
            DateOnly date, 
            TimeSpan offset, 
            string? responseArea,
            string? workGroup
            );

    }
}
