using System.Net.Http.Json; using System.Text.Json; using OrderPROPrint.Models; namespace OrderPROPrint.Services; public class PrintApiClient : IDisposable { private readonly HttpClient _httpClient; public PrintApiClient(string apiUrl, string apiKey) { _httpClient = new HttpClient { BaseAddress = new Uri(apiUrl.TrimEnd('/') + "/"), Timeout = TimeSpan.FromSeconds(30) }; _httpClient.DefaultRequestHeaders.Add("X-Api-Key", apiKey); } public async Task> GetPendingJobsAsync(CancellationToken cancellationToken = default) { var response = await _httpClient.GetAsync("api/print/jobs/pending", cancellationToken); response.EnsureSuccessStatusCode(); var json = await response.Content.ReadAsStringAsync(cancellationToken); var result = JsonSerializer.Deserialize(json); return result?.Jobs ?? new List(); } public async Task DownloadLabelAsync(int jobId, CancellationToken cancellationToken = default) { var response = await _httpClient.GetAsync($"api/print/jobs/{jobId}/download", cancellationToken); response.EnsureSuccessStatusCode(); return await response.Content.ReadAsByteArrayAsync(cancellationToken); } public async Task MarkCompleteAsync(int jobId, CancellationToken cancellationToken = default) { var response = await _httpClient.PostAsync($"api/print/jobs/{jobId}/complete", null, cancellationToken); return response.IsSuccessStatusCode; } public async Task TestConnectionAsync() { try { var response = await _httpClient.GetAsync("api/print/jobs/pending"); return response.IsSuccessStatusCode; } catch { return false; } } public void Dispose() { _httpClient.Dispose(); } }