using System.Text.Json.Serialization;
using System.Net.Http.Json;
using System.Text.Json;
using System.Net.Http.Headers;
using LibraryManagement.Shared.Models;
using Blazored.LocalStorage;
namespace BlazorWebAssembly.Services
{
public class LibraryApiClient
{
private readonly HttpClient _httpClient;
private readonly ILocalStorageService _localStorage;
public LibraryApiClient(HttpClient httpClient, ILocalStorageService localStorage)
{
_httpClient = httpClient;
_localStorage = localStorage;
}
/// Ensures the JWT token from localStorage is attached before every request.
private async Task EnsureAuthHeader()
{
var token = await _localStorage.GetItemAsync("authToken");
if (!string.IsNullOrWhiteSpace(token))
_httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("bearer", token);
}
#region Auth
public async Task LoginAsync(LoginRequest request)
{
var response = await _httpClient.PostAsJsonAsync("api/auth/login", request);
return response.IsSuccessStatusCode ? await response.Content.ReadFromJsonAsync() : null;
}
public async Task RegisterAsync(RegisterRequest request)
{
var response = await _httpClient.PostAsJsonAsync("api/auth/register", request);
return response.IsSuccessStatusCode ? await response.Content.ReadFromJsonAsync() : null;
}
public async Task