using System.Text; using Newtonsoft.Json; using Duesk.Api.Models; namespace Duesk.Api; public static class ApiClient { private const string BaseUrl = "https://paul-koop.org/api/"; private static readonly HttpClient _httpClient = new HttpClient(); static ApiClient() { _httpClient.Timeout = TimeSpan.FromSeconds(30); } public static async Task LoginAsync(string username, string password) { try { var data = new { username, password }; var json = JsonConvert.SerializeObject(data); var content = new StringContent(json, Encoding.UTF8, "application/json"); var response = await _httpClient.PostAsync(BaseUrl + "api_login.php", content); var responseBody = await response.Content.ReadAsStringAsync(); return JsonConvert.DeserializeObject(responseBody); } catch (Exception ex) { return new LoginResponse { Success = false, Error = ex.Message }; } } public static async Task?> GetProfilesAsync() { if (!SessionManager.Instance.IsLoggedIn) return null; try { var request = new HttpRequestMessage(HttpMethod.Get, BaseUrl + "api_profiles.php"); request.Headers.Add("X-User-ID", SessionManager.Instance.UserId); request.Headers.Add("X-Session", SessionManager.Instance.Session); var response = await _httpClient.SendAsync(request); var responseBody = await response.Content.ReadAsStringAsync(); return JsonConvert.DeserializeObject>(responseBody); } catch { return null; } } public static async Task GetProfileAsync(string profileId) { if (!SessionManager.Instance.IsLoggedIn) return null; try { var request = new HttpRequestMessage(HttpMethod.Get, BaseUrl + $"api_profiles.php?id={profileId}"); request.Headers.Add("X-User-ID", SessionManager.Instance.UserId); request.Headers.Add("X-Session", SessionManager.Instance.Session); var response = await _httpClient.SendAsync(request); var responseBody = await response.Content.ReadAsStringAsync(); return JsonConvert.DeserializeObject(responseBody); } catch { return null; } } public static async Task CreateProfileAsync(Profile profile) { if (!SessionManager.Instance.IsLoggedIn) return false; try { var json = JsonConvert.SerializeObject(profile); var content = new StringContent(json, Encoding.UTF8, "application/json"); var request = new HttpRequestMessage(HttpMethod.Post, BaseUrl + "api_profiles.php"); request.Headers.Add("X-User-ID", SessionManager.Instance.UserId); request.Headers.Add("X-Session", SessionManager.Instance.Session); request.Content = content; var response = await _httpClient.SendAsync(request); return response.IsSuccessStatusCode; } catch { return false; } } public static async Task UpdateProfileAsync(Profile profile) { if (!SessionManager.Instance.IsLoggedIn) return false; try { var json = JsonConvert.SerializeObject(profile); var content = new StringContent(json, Encoding.UTF8, "application/json"); var request = new HttpRequestMessage(HttpMethod.Put, BaseUrl + "api_profiles.php"); request.Headers.Add("X-User-ID", SessionManager.Instance.UserId); request.Headers.Add("X-Session", SessionManager.Instance.Session); request.Content = content; var response = await _httpClient.SendAsync(request); return response.IsSuccessStatusCode; } catch { return false; } } public static async Task DeleteProfileAsync(string profileId) { if (!SessionManager.Instance.IsLoggedIn) return false; try { var request = new HttpRequestMessage(HttpMethod.Delete, BaseUrl + $"api_profiles.php?id={profileId}"); request.Headers.Add("X-User-ID", SessionManager.Instance.UserId); request.Headers.Add("X-Session", SessionManager.Instance.Session); var response = await _httpClient.SendAsync(request); return response.IsSuccessStatusCode; } catch { return false; } } public static async Task?> GetGroupsAsync() { if (!SessionManager.Instance.IsLoggedIn) return null; try { var request = new HttpRequestMessage(HttpMethod.Get, BaseUrl + "api_groups.php"); request.Headers.Add("X-User-ID", SessionManager.Instance.UserId); request.Headers.Add("X-Session", SessionManager.Instance.Session); var response = await _httpClient.SendAsync(request); var responseBody = await response.Content.ReadAsStringAsync(); return JsonConvert.DeserializeObject>(responseBody); } catch { return null; } } public static async Task CreateGroupAsync(string groupName) { if (!SessionManager.Instance.IsLoggedIn) return false; try { var data = new { name = groupName }; var json = JsonConvert.SerializeObject(data); var content = new StringContent(json, Encoding.UTF8, "application/json"); var request = new HttpRequestMessage(HttpMethod.Post, BaseUrl + "api_groups.php"); request.Headers.Add("X-User-ID", SessionManager.Instance.UserId); request.Headers.Add("X-Session", SessionManager.Instance.Session); request.Content = content; var response = await _httpClient.SendAsync(request); return response.IsSuccessStatusCode; } catch { return false; } } public static async Task DeleteGroupAsync(int groupId) { if (!SessionManager.Instance.IsLoggedIn) return false; try { var request = new HttpRequestMessage(HttpMethod.Delete, BaseUrl + $"api_groups.php?id={groupId}"); request.Headers.Add("X-User-ID", SessionManager.Instance.UserId); request.Headers.Add("X-Session", SessionManager.Instance.Session); var response = await _httpClient.SendAsync(request); return response.IsSuccessStatusCode; } catch { return false; } } }