using Persistence.Models;
using Persistence.Models.Requests;

namespace Persistence.Client.Clients.Interfaces;

/// <summary>
/// Клиент для работы с технологическими сообщениями
/// </summary>
public interface ITechMessagesClient : IDisposable
{
	/// <summary>
	/// Добавить новые технологические сообщения
	/// </summary>
	/// <param name="dtos"></param>
	/// <param name="token"></param>
	/// <returns></returns>
	Task<int> AddRange(IEnumerable<TechMessageDto> dtos, CancellationToken token);

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

	/// <summary>
	/// Получить список технологических сообщений в виде страницы
	/// </summary>
	/// <param name="request"></param>
	/// <param name="token"></param>
	/// <returns></returns>
	Task<PaginationContainer<TechMessageDto>> GetPage(PaginationRequest request, 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="autoDrillingSystem"></param>
	/// <param name="categoryId"></param>
	/// <param name="token"></param>
	/// <returns></returns>
	Task<IEnumerable<MessagesStatisticDto>> GetStatistics(string autoDrillingSystem, int categoryId, CancellationToken token);

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