using System; using System.Collections.Generic; using System.Text.RegularExpressions; using System.Threading.Tasks; using JpnCardsPokemonSdk.Client.Endpoints; namespace JpnCardsPokemonSdk.Client.Responses; public class EnumerableApiResponse : IApiResponse>, IPageableApiResponse, IEnumerable> where T : EndpointObject { private string? RequestUri { get; set; } public int TotalPages => (int)Math.Ceiling((decimal)( (IPageableApiResponse, IEnumerable>)this).TotalCount / ( (IPageableApiResponse, IEnumerable>)this).PageSize); public IEnumerable? Data { get; set; } ApiClient? IPageableApiResponse, IEnumerable>.CurrentApiClient { get; set; } int IPageableApiResponse, IEnumerable>.Page { get; set; } int IPageableApiResponse, IEnumerable>.PageSize { get; set; } int IPageableApiResponse, IEnumerable>.Count { get; set; } int IPageableApiResponse, IEnumerable>.TotalCount { get; set; } async Task> IPageableApiResponse, IEnumerable>. FetchNextPageAsync() { return await ((IPageableApiResponse, IEnumerable>)this).FetchPageAsync(( (IPageableApiResponse, IEnumerable>)this).Page + 1); } async Task?> IPageableApiResponse, IEnumerable>. FetchPageAsync(int page) { var requestUri = RequestUri + "&page=" + page; return await ((IPageableApiResponse, IEnumerable>)this).CurrentApiClient ?.FetchDataAsync, IEnumerable>(requestUri)!; } void IPageableApiResponse, IEnumerable>.RememberRequestUri(string requestUri) { // Remember full Uri without page RequestUri = Regex.Replace(requestUri, @"page=\d*&?", ""); } }