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

namespace AsbCloudWebApi.IntegrationTests.Clients;

public interface IProcessMapPlanClient<TDto> where TDto : ProcessMapPlanBaseDto
{
    public const string BaseRoute = "/api/well/{idWell}/{controller}";

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

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

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

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

    [Get(BaseRoute)]
    Task<IApiResponse<IEnumerable<TDto>>> Get(int idWell, string controller);

    [Get($"{BaseRoute}/changelogByMoment")]
    Task<IApiResponse<IEnumerable<ChangeLogDto<TDto>>>> Get(int idWell, string controller, DateTimeOffset? moment);

    [Get("/api/telemetry/{uid}/{controller}")]
    Task<IApiResponse<IEnumerable<ChangeLogDto<TDto>>>> Get(string uid, string controller, DateTimeOffset? updateFrom);

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

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

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