using AsbCloudApp.Data;
using AsbCloudApp.Data.ProcessMaps;
using AsbCloudApp.Requests;
using Refit;

namespace AsbCloudWebApi.IntegrationTests.Clients;

public interface IProcessMapPlanDrillingClient
{
    private const string BaseRoute = "/api/well/{idWell}/ProcessMapPlanDrilling";

    [Post(BaseRoute)]
    Task<IApiResponse<int>> InsertRange(int idWell, [Body] IEnumerable<ProcessMapPlanDrillingDto> dtos);

    [Post($"{BaseRoute}/replace")]
    Task<IApiResponse<int>> ClearAndInsertRange(int idWell, [Body] IEnumerable<ProcessMapPlanDrillingDto> dtos);

    [Delete(BaseRoute)]
    Task<IApiResponse<int>> DeleteRange(int idWell, [Body] IEnumerable<int> ids);

    [Delete($"{BaseRoute}/clear")]
    Task<IApiResponse<int>> Clear(int idWell);

    [Get(BaseRoute)]
    Task<IApiResponse<IEnumerable<ProcessMapPlanDrillingDto>>> Get(int idWell, ProcessMapPlanBaseRequest request);

    [Get($"{BaseRoute}/changeLog")]
    Task<IApiResponse<IEnumerable<ProcessMapPlanDrillingDto>>> GetChangeLog(int idWell, DateOnly? date);

    [Get($"{BaseRoute}/dates")]
    Task<IApiResponse<IEnumerable<DateOnly>>> GetDatesChange(int idWell);

    [Put(BaseRoute)]
    Task<IApiResponse<int>> UpdateOrInsertRange(int idWell, IEnumerable<ProcessMapPlanDrillingDto> dtos);

    [Multipart]
    [Post(BaseRoute + "/parse")]
    Task<IApiResponse<ParserResultDto<ProcessMapPlanDrillingDto>>> Parse(int idWell, [AliasAs("file")] StreamPart stream);
}