using System.Net.Http.Json; using Microsoft.Extensions.Logging; using LittleShop.Client.Models; namespace LittleShop.Client.Services; public class MessageService : IMessageService { private readonly HttpClient _httpClient; private readonly ILogger _logger; public MessageService(HttpClient httpClient, ILogger logger) { _httpClient = httpClient; _logger = logger; } public async Task> GetPendingMessagesAsync(string platform = "Telegram") { try { var response = await _httpClient.GetAsync($"api/bot/messages/pending?platform={platform}"); if (response.IsSuccessStatusCode) { var messages = await response.Content.ReadFromJsonAsync>(); return messages ?? new List(); } _logger.LogWarning("Failed to get pending messages: {StatusCode}", response.StatusCode); return new List(); } catch (Exception ex) { _logger.LogError(ex, "Error getting pending messages"); return new List(); } } public async Task MarkMessageAsSentAsync(Guid messageId, string? platformMessageId = null) { try { var url = $"api/bot/messages/{messageId}/mark-sent"; if (!string.IsNullOrEmpty(platformMessageId)) { url += $"?platformMessageId={platformMessageId}"; } var response = await _httpClient.PostAsync(url, null); return response.IsSuccessStatusCode; } catch (Exception ex) { _logger.LogError(ex, "Error marking message {MessageId} as sent", messageId); return false; } } public async Task MarkMessageAsFailedAsync(Guid messageId, string reason) { try { var response = await _httpClient.PostAsJsonAsync($"api/bot/messages/{messageId}/mark-failed", reason); return response.IsSuccessStatusCode; } catch (Exception ex) { _logger.LogError(ex, "Error marking message {MessageId} as failed", messageId); return false; } } public async Task CreateCustomerMessageAsync(object messageData) { try { var response = await _httpClient.PostAsJsonAsync("api/bot/messages/customer-create", messageData); return response.IsSuccessStatusCode; } catch (Exception ex) { _logger.LogError(ex, "Error creating customer message"); return false; } } }