using System.Net.Http.Json; using System.Text.Json; using DashCaddy.Desktop.Models; namespace DashCaddy.Desktop.Services; public class ApiClient { private readonly HttpClient _httpClient; private readonly string _baseUrl; public ApiClient(string baseUrl) { _baseUrl = baseUrl.TrimEnd('/'); _httpClient = new HttpClient { BaseAddress = new Uri(_baseUrl), Timeout = TimeSpan.FromSeconds(30) }; } public async Task> GetServicesAsync() { var response = await _httpClient.GetAsync("/api/v1/services"); response.EnsureSuccessStatusCode(); var result = await response.Content.ReadFromJsonAsync>>(); return result?.Data ?? new List(); } public async Task GetServiceAsync(string id) { var response = await _httpClient.GetAsync($"/api/v1/services/{id}"); response.EnsureSuccessStatusCode(); var result = await response.Content.ReadFromJsonAsync>(); return result?.Data; } public async Task CreateServiceAsync(ServiceModel service) { var response = await _httpClient.PostAsJsonAsync("/api/v1/services", service); response.EnsureSuccessStatusCode(); var result = await response.Content.ReadFromJsonAsync>(); return result?.Data; } public async Task UpdateServiceAsync(string id, ServiceModel service) { var response = await _httpClient.PutAsJsonAsync($"/api/v1/services/{id}", service); response.EnsureSuccessStatusCode(); var result = await response.Content.ReadFromJsonAsync>(); return result?.Data; } public async Task RemoveServiceAsync(string id) { var response = await _httpClient.DeleteAsync($"/api/v1/services/{id}"); response.EnsureSuccessStatusCode(); } public async Task GetHealthAsync() { var response = await _httpClient.GetAsync("/api/v1/health"); response.EnsureSuccessStatusCode(); var result = await response.Content.ReadFromJsonAsync>(); return result?.Data ?? new HealthResponse(); } public async Task> GetConfigAsync() { var response = await _httpClient.GetAsync("/api/v1/config"); response.EnsureSuccessStatusCode(); var result = await response.Content.ReadFromJsonAsync>>(); return result?.Data ?? new Dictionary(); } public async Task UpdateConfigAsync(Dictionary config) { var response = await _httpClient.PutAsJsonAsync("/api/v1/config", config); response.EnsureSuccessStatusCode(); } private class ApiResponse { public bool Success { get; set; } public T Data { get; set; } public string Error { get; set; } } }