using System.Threading.Tasks;
using Persistence.Models;

namespace Persistence.Repositories
{
	/// <summary>
	/// Интерфейс по работе с технологическими сообщениями
	/// </summary>
	public interface ITechMessagesRepository
	{
		/// <summary>
		/// Получить страницу списка объектов
		/// </summary>
		/// <param name="request"></param>
		/// <param name="token"></param>
		/// <returns></returns>
		Task<PaginationContainer<TechMessageDto>> GetPage(RequestDto request, CancellationToken token);

		/// <summary>
		/// Добавление новых сообщений
		/// </summary>
		/// <param name="dtos"></param>
		/// <param name="token"></param>
		/// <returns></returns>
		Task<int> InsertRange(IEnumerable<TechMessageDto> dtos, CancellationToken token);

		/// <summary>
		/// Получение списка уникальных названий систем АБ
		/// </summary>
		/// <param name="token"></param>
		/// <returns></returns>
		Task<IEnumerable<string>> GetSystems(CancellationToken token);

		/// <summary>
		/// Получение количества сообщений по категориям и системам автобурения
		/// </summary>
		/// <param name="categoryId">Id Категории важности</param>
		/// <param name="autoDrillingSystem">Система автобурения</param>
		/// <param name="token"></param>
		/// <returns></returns>
		Task<IEnumerable<MessagesStatisticDto>> GetStatistics(IEnumerable<string> autoDrillingSystem, IEnumerable<int> categoryIds, CancellationToken token);

		/// <summary>
		/// Получить порцию записей, начиная с заданной даты 
		/// </summary>
		/// <param name="dateBegin"></param>
		/// <param name="take"></param>
		/// <param name="token"></param>
		/// <returns></returns>
		Task<IEnumerable<TechMessageDto>> GetPart(DateTimeOffset dateBegin, int take, CancellationToken token);

		/// <summary>
		/// Получить диапазон дат, для которых есть данные в репозитории
		/// </summary>
		/// <param name="token"></param>
		/// <returns></returns>
		Task<DatesRangeDto> GetDatesRangeAsync(CancellationToken token);
	}
}