using OnProfNext.Shared.Models.DTOs; using System.Net.Http.Json; using System.Text.Json; namespace OnProfNext.Client.Services { public class BookingApiService { private readonly HttpClient _httpClient; public BookingApiService(HttpClient httpClient) { _httpClient = httpClient; } public async Task<(bool Success, List? Data, string? Error)> GetMyBookingsAsync() { try { var bookings = await _httpClient.GetFromJsonAsync>("api/bookings/mine"); Console.WriteLine($"Received bookings: {JsonSerializer.Serialize(bookings, new JsonSerializerOptions { WriteIndented = true })}"); return (true, bookings ?? new(), null); } catch (Exception ex) { return (false, null, $"Fehler beim Laden der Buchungen: {ex.Message}"); } } public async Task<(bool Success, List? Data, string? Error)> GetBookingsByOrderAsync(int orderId) { try { var bookings = await _httpClient.GetFromJsonAsync>($"api/bookings/byorder/{orderId}"); Console.WriteLine($"Received bookings for order {orderId}: {JsonSerializer.Serialize(bookings, new JsonSerializerOptions { WriteIndented = true })}"); return (true, bookings ?? new(), null); } catch (Exception ex) { return (false, null, $"Fehler beim Laden der Buchungen: {ex.Message}"); } } public async Task<(bool Success, string? Error)> CreateBookingAsync(BookingCreateDto dto) { try { // Explizite Serialisierung für Debugging var jsonPayload = JsonSerializer.Serialize(new { dto.OrderId, date = dto.Date.ToString("yyyy-MM-ddTHH:mm:ss"), dto.Hours, dto.MandantId, dto.Description }, new JsonSerializerOptions { PropertyNamingPolicy = JsonNamingPolicy.CamelCase }); Console.WriteLine($"Sending booking to API: {jsonPayload}"); var content = new StringContent(jsonPayload, System.Text.Encoding.UTF8, "application/json"); var response = await _httpClient.PostAsync("api/bookings", content); if (response.IsSuccessStatusCode) { Console.WriteLine("Booking API call successful."); return (true, null); } else { var errorContent = await response.Content.ReadAsStringAsync(); Console.WriteLine($"API error response: {errorContent}"); return (false, $"Fehler beim Speichern: {response.ReasonPhrase}"); } } catch (Exception ex) { Console.WriteLine($"Exception in CreateBookingAsync: {ex.Message}"); return (false, ex.Message); } } public async Task<(bool Success, string? Error)> DeleteBookingAsync(int id) { try { var response = await _httpClient.DeleteAsync($"api/bookings/{id}"); if (response.IsSuccessStatusCode) { Console.WriteLine("Delete booking API call successful."); return (true, null); } else { var errorContent = await response.Content.ReadAsStringAsync(); Console.WriteLine($"API error response: {errorContent}"); return (false, $"Fehler beim Löschen: {response.ReasonPhrase}"); } } catch (Exception ex) { Console.WriteLine($"Exception in DeleteBookingAsync: {ex.Message}"); return (false, ex.Message); } } } }