using AsbCloudApp.Data;
using AsbCloudApp.Requests;
using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
namespace AsbCloudApp.Repositories
{
///
/// сервис операций по скважине
///
public interface IWellOperationRepository
{
///
/// Список секций
///
///
IEnumerable GetSectionTypes();
///
/// список плановых операций для сопоставления
///
///
///
///
///
Task GetOperationsPlanAsync(int idWell, DateTime? currentDate, CancellationToken token);
///
/// дата/время первой операции по скважине
///
///
///
DateTimeOffset? FirstOperationDate(int idWell);
///
/// Получить страницу списка операций
///
///
///
///
Task> GetAsync(WellOperationRequest request, CancellationToken token);
///
/// Получить страницу списка операций
///
///
///
///
Task> GetPageAsync(WellOperationRequest request, CancellationToken token);
///
/// Получить операцию по id
///
///
///
///
Task GetOrDefaultAsync(int id, CancellationToken token);
///
/// Получить статистику операции по скважине с группировкой по категориям
///
///
///
///
Task> GetGroupOperationsStatAsync(
WellOperationRequest request,
CancellationToken token);
///
/// Добавить несколько операций за один раз
///
///
///
///
Task InsertRangeAsync(IEnumerable wellOperationDtos, CancellationToken token);
///
/// Обновить существующую операцию
///
///
///
///
Task UpdateAsync(WellOperationDto dto, CancellationToken token);
///
/// Удалить операции по id
///
///
///
///
Task DeleteAsync(IEnumerable ids, CancellationToken token);
///
/// Получить секции скважин из операций ГГД. Секцие поделены на плановые и фактические.
///
///
///
///
Task> GetSectionsAsync(IEnumerable idsWells, CancellationToken token);
///
/// Получить диапазон дат выполнения операций
///
///
///
///
///
Task GetDatesRangeAsync(int idWell, int idType, CancellationToken cancellationToken);
///
/// Удаление полных дубликатов операций по всем скважинам
///
///
///
///
Task RemoveDuplicates(Action onProgressCallback, CancellationToken token);
///
/// Усечение пересекающейся последующей операции по дате и глубине забоя
///
/// Фильтр по дате. Если хоть одна операция попадет в в фильтр, то будет обработана вся скважина, а не только эта операция
/// Фильтр по дате. Если хоть одна операция попадет в в фильтр, то будет обработана вся скважина, а не только эта операция
///
///
///
Task TrimOverlapping(DateTimeOffset? geDate, DateTimeOffset leDate, Action onProgressCallback, CancellationToken token);
}
}