using Microsoft.AspNetCore.Mvc; using LittleShop.DTOs; using LittleShop.Services; using LittleShop.Models; namespace LittleShop.Controllers; [ApiController] [Route("api/bot/messages")] public class BotMessagesController : ControllerBase { private readonly ICustomerMessageService _messageService; private readonly ILogger _logger; public BotMessagesController(ICustomerMessageService messageService, ILogger logger) { _messageService = messageService; _logger = logger; } [HttpGet("pending")] public async Task>> GetPendingMessages([FromQuery] string platform = "Telegram") { var messages = await _messageService.GetPendingMessagesAsync(platform); return Ok(messages); } [HttpPost("{id}/mark-sent")] public async Task MarkMessageAsSent(Guid id, [FromQuery] string? platformMessageId = null) { var success = await _messageService.MarkMessageAsSentAsync(id, platformMessageId); if (!success) { return NotFound("Message not found"); } return Ok(); } [HttpPost("{id}/mark-failed")] public async Task MarkMessageAsFailed(Guid id, [FromBody] string reason) { var success = await _messageService.MarkMessageAsFailedAsync(id, reason); if (!success) { return NotFound("Message not found"); } return Ok(); } // TEMPORARY TEST ENDPOINT - REMOVE IN PRODUCTION [HttpPost("test-create")] public async Task> CreateTestMessage([FromBody] CreateTestMessageDto dto) { var createMessageDto = new CreateCustomerMessageDto { CustomerId = dto.CustomerId, OrderId = dto.OrderId, Type = dto.Type, Subject = dto.Subject, Content = dto.Content, Priority = dto.Priority, IsUrgent = dto.IsUrgent }; var message = await _messageService.CreateMessageAsync(createMessageDto); if (message == null) { return BadRequest("Failed to create message"); } return Ok(message); } } // TEMPORARY DTO FOR TESTING public class CreateTestMessageDto { public Guid CustomerId { get; set; } public Guid? OrderId { get; set; } public MessageType Type { get; set; } public string Subject { get; set; } = string.Empty; public string Content { get; set; } = string.Empty; public int Priority { get; set; } = 5; public bool IsUrgent { get; set; } = false; }