using Microsoft.Extensions.Logging;
using PARR.BLL.Domain.Mq;
using PARR.BLL.Services.Interfaces;
using PARR.TemplateMatcher.Services.Interfaces;
using PARR.TemplateMatcher.Settings;
using System.Text.Json;

namespace PARR.TemplateMatcher.Services.Implementations;

internal class TemplateUpdaterMqSender : ITemplateUpdaterMqSender
{
    private readonly ILogger<TemplateUpdaterMqSender> logger;
    private readonly IMqService mqService;
    private readonly MqSettings mqSettings;

    public TemplateUpdaterMqSender(
        ILogger<TemplateUpdaterMqSender> logger,
        IMqService mqService,
        MqSettings mqSettings)
    {
        this.logger = logger;
        this.mqService = mqService;
        this.mqSettings = mqSettings;
    }

    public async Task SendTemplateUpdateMessageAsync(TemplateUpdaterMq updateRequest)
    {
        logger.LogDebug("Отправка сообщения в очередь '{Queue}' для шаблона {TemplateId}",
            mqSettings.TemplateUpdater.QueueName, updateRequest.TemplateId);

        var msg = JsonSerializer.Serialize(updateRequest);
        var result = await mqService.SendAsync(mqSettings.TemplateUpdater, new[] { msg });

        if (result.IsSuccess)
        {
            logger.LogInformation("Отправлен запрос на обновление шаблона {TemplateId}", updateRequest.TemplateId);
        }
        else
        {
            logger.LogError("Ошибка при отправке запроса на обновление шаблона {TemplateId} в очередь '{Queue}'.",
                updateRequest.TemplateId, mqSettings.TemplateUpdater.QueueName);
        }
    }
}