using AsbCloudApp.Data.Trajectory;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;

namespace AsbCloudApp.Repositories;

/// <summary>
/// CRUD-репозиторий для работы с траекторией из клиента (плановой и фактической)
/// </summary>
/// <returns></returns>
//TrajectoryGeoPlanDto
public interface ITrajectoryEditableRepository<T> : ITrajectoryRepository<T> where T : TrajectoryGeoDto
{
    /// <summary>
    /// Добавить строки с координатами по одной скважине. Если в коллекции координаты для разных скважин получаем exception.
    /// </summary>        
    /// <param name="trajectoryRows"></param>
    /// <param name="token"></param>
    /// <returns>количество записанных строк или exception с описанием</returns>
    Task<int> AddRangeAsync(IEnumerable<T> trajectoryRows, CancellationToken token);

    /// <summary>
    /// Добавить одну строку с координатами
    /// </summary>        
    /// <param name="trajectoryRow"></param>
    /// <param name="token"></param>
    /// <returns></returns>
    Task<int> AddAsync(T trajectoryRow, CancellationToken token);

    /// <summary>
    /// Обновить строку с координатами
    /// </summary>
    /// <param name="row"></param>
    /// <param name="token"></param>
    /// <returns></returns>
    Task<int> UpdateAsync(T row,
        CancellationToken token);

    /// <summary>
    /// Удалить строки с координатами
    /// </summary>
    /// <param name="ids"></param>
    /// <param name="token"></param>
    /// <returns></returns>
    Task<int> DeleteRangeAsync(IEnumerable<int> ids, CancellationToken token);

    /// <summary>
    /// Удалить всю траекторию по ИД скважины
    /// </summary>
    /// <param name="idWell"></param>
    /// <param name="token"></param>
    /// <returns></returns>
    Task<int> DeleteByIdWellAsync(int idWell, CancellationToken token);
}