using System.Net.Http.Json; using FluentResults; using NexusReader.Application.Abstractions.Services; using NexusReader.Application.Queries.Reader; namespace NexusReader.Web.Client.Services; public class WasmEpubService : IEpubService { private readonly HttpClient _httpClient; public WasmEpubService(HttpClient httpClient) { _httpClient = httpClient; } public async Task> GetEpubContentAsync(int chapterIndex) { try { var response = await _httpClient.GetAsync($"/api/epub/{chapterIndex}"); if (response.IsSuccessStatusCode) { var viewModel = await response.Content.ReadFromJsonAsync(); return viewModel != null ? Result.Ok(viewModel) : Result.Fail("Failed to deserialize response."); } // Try to read the error message from the body var errorBody = await response.Content.ReadAsStringAsync(); return Result.Fail($"Server error ({response.StatusCode}): {errorBody}"); } catch (Exception ex) { // Fallback for network errors or parsing exceptions return Result.Fail(new Error($"Network or parsing error: {ex.Message}").CausedBy(ex)); } } }