using DD.Persistence.Models;
using Refit;

namespace DD.Persistence.Client.Clients.Interfaces;

/// <summary>
/// Клиент для работы с параметрами Wits
/// </summary>
public interface IWitsDataClient : IDisposable
{
	/// <summary>
	/// Получить набор параметров (Wits) для построения графика
	/// </summary>
	/// <param name="discriminatorId"></param>
	/// <param name="dateFrom"></param>
	/// <param name="dateTo"></param>
	/// <param name="approxPointsCount"></param>
	/// <param name="token"></param>
	/// <returns></returns>
	Task<IEnumerable<WitsDataDto>> GetValuesForGraph(Guid discriminatorId, [Query] DateTimeOffset dateFrom, [Query] DateTimeOffset dateTo, [Query] int approxPointsCount, CancellationToken token);

	/// <summary>
	/// Сохранить набор параметров (Wits)
	/// </summary>
	/// <param name="dtos"></param>
	/// <param name="token"></param>
	/// <returns></returns>
	Task<int> AddRange(IEnumerable<WitsDataDto> dtos, CancellationToken token);

	/// <summary>
	/// Получить порцию записей, начиная с заданной даты 
	/// </summary>
	/// <param name="discriminatorId"></param>
	/// <param name="dateBegin"></param>
	/// <param name="take"></param>
	/// <param name="token"></param>
	/// <returns></returns>
	Task<IEnumerable<WitsDataDto>> GetPart(Guid discriminatorId, [Query] DateTimeOffset dateBegin, [Query] int take = 24 * 60 * 60, CancellationToken token = default);

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