using AsbCloudApp.Data.GTR;
using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using AsbCloudApp.Requests;
using AsbCloudApp.Data;
using AsbCloudApp.Services;

namespace AsbCloudApp.Repositories;

/// <summary>
/// данные ГТИ
/// </summary>
public interface IGtrRepository : ITelemetryDataEditorService
{
    /// <summary>
    /// добавить данные (для панели бурильщика)
    /// </summary>
    /// <param name="idTelemetry"></param>
    /// <param name="dtos"></param>
    /// <param name="token"></param>
    /// <returns></returns>
    Task SaveDataAsync(int idTelemetry, IEnumerable<WitsRecordDto> dtos, CancellationToken token);
    
    /// <summary>
    /// получить данные ГТИ
    /// </summary>
    /// <param name="idWell"></param>
    /// <param name="request"></param>
    /// <param name="token"></param>
    /// <returns></returns>
    Task<IEnumerable<GtrWitsDto>> GetAsync(int idWell, GtrRequest request, CancellationToken token);

    /// <summary>
    /// получить  данные для клиента
    /// </summary>
    /// <param name="idWell"></param>
    /// <param name="dateBegin"></param>
    /// <param name="intervalSec"></param>
    /// <param name="approxPointsCount">кол-во элементов до которых эти данные прореживаются</param>
    /// <param name="token"></param>
    /// <returns></returns>
    [Obsolete]
    Task<IEnumerable<WitsRecordDto>> GetAsync(int idWell,
        DateTime? dateBegin, double intervalSec = 600d,
        int approxPointsCount = 1024, CancellationToken token = default);

    /// <summary>
    /// получение последних данных ГТИ по record id
    /// </summary>
    /// <param name="idWell"></param>
    /// <param name="idRecord"></param>
    /// <returns></returns>
    [Obsolete]
    IEnumerable<WitsItemRecordDto> GetLastDataByRecordId(int idWell, int idRecord);

    /// <summary>
    /// Последние полученные параметры
    /// </summary>
    /// <param name="idWell"></param>
    /// <returns></returns>
    [Obsolete]
    IEnumerable<WitsItemRecordDto> GetLastData(int idWell);

    /// <summary>
    /// Доступные даты по скважине
    /// </summary>
    /// <param name="idWell"></param>
    /// <param name="geDate"></param>
    /// <param name="leDate"></param>
    /// <param name="token"></param>
    /// <returns></returns>
    Task<DatesRangeDto?> GetRangeAsync(int idWell, DateTimeOffset? geDate, DateTimeOffset? leDate, CancellationToken token);
}