using AsbCloudApp.Data.Subsystems;
using AsbCloudApp.Requests;
using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using AsbCloudApp.Data;

namespace AsbCloudApp.Services;

/// <summary>
/// Получение инфо о наработке подсистем
/// </summary>
public interface ISubsystemService
{
   /// <summary>
   /// Статистика о наработке подсистем
   /// </summary>
   /// <param name="request"></param>
   /// <param name="token"></param>
   /// <returns></returns>
   Task<IEnumerable<SubsystemStatDto>> GetStatAsync(SubsystemRequest request, CancellationToken token);
   
   /// <summary>
   /// Получение статистики по наработке подсистем по активным скважинам
   /// </summary>
   /// <param name="wellIds"></param>
   /// <param name="token"></param>
   /// <returns></returns>
   Task<IEnumerable<SubsystemActiveWellStatDto>> GetStatByActiveWells(IEnumerable<int> wellIds, CancellationToken token);

   /// <summary>
   /// Получение статистики по бурильщику
   /// </summary>
   /// <param name="request"></param>
   /// <param name="token"></param>
   /// <returns></returns>
   Task<IEnumerable<DrillerDetectedOperationStatDto>> GetByWellsAsync(GetStatRequest request,
      CancellationToken token);

    /// <summary>
    /// Получение статистики по плановым и фактическим подсистемам на скважинах
    /// </summary>
    /// <param name="request">параметры запроса</param>
    /// <param name="token"></param>
    /// <returns></returns>
    Task<IEnumerable<SubsystemPlanFactStatDto>> GetStatPlanFactByWellsAsync(SubsystemPlanFactRequest request, CancellationToken token);
}