using System;
using System.Threading;
using System.Threading.Tasks;
using AsbCloudApp.Data;
using AsbCloudApp.Data.DailyReport;
using AsbCloudApp.Requests;

namespace AsbCloudApp.Services.DailyReport;

/// <summary>
/// Суточные отчёты
/// </summary>
public interface IDailyReportService
{
	/// <summary>
	/// Обновить или создать суточный отчёт
	/// </summary>
	/// <param name="dateDailyReport"></param>
	/// <param name="idUser"></param>
	/// <param name="editableBlock"></param>
	/// <param name="cancellationToken"></param>
	/// <param name="idWell"></param>
	/// <returns></returns>
	Task<int> UpdateOrInsertAsync<TBlock>(int idWell, DateOnly dateDailyReport, int idUser, TBlock editableBlock,
		CancellationToken cancellationToken)
		where TBlock : ItemInfoDto;

	/// <summary>
	/// Получить сформированный суточный отчёт
	/// </summary>
	/// <param name="idWell"></param>
	/// <param name="dateDailyReport"></param>
	/// <param name="cancellationToken"></param>
	/// <returns></returns>
	Task<DailyReportDto> GetAsync(int idWell, DateOnly dateDailyReport, CancellationToken cancellationToken);

	/// <summary>
	/// Получить список суточных отчётов по скважине
	/// </summary>
	/// <param name="idWell"></param>
	/// <param name="request"></param>
	/// <param name="cancellationToken"></param>
	/// <returns></returns>
	Task<PaginationContainer<DailyReportDto>> GetAsync(int idWell, FileReportRequest request, CancellationToken cancellationToken);
}