using Newtonsoft.Json;
using TelpoPush.WanJiaAn.Worker.Models.Enum;
using TelpoPush.WanJiaAn.Worker.Models.MqTemplates;

namespace TelpoPush.WanJiaAn.Worker.Service.Mq
{
    public class MqProcessMessage
    {
        private readonly ILogger<MqProcessMessage> _logger;
        private readonly MessageProducer _messageProducer;

        public MqProcessMessage(ILogger<MqProcessMessage> logger, MessageProducer producer)
        {
            _logger = logger;
            _messageProducer = producer;
        }

        public async Task ProcessProperty(string imei, BaseModel model, HeadersDto headers)
        {
            List<TopicModel> ls = new List<TopicModel>();

            ls.Add(new TopicModel()
            {
                Topic = "topic.push.property",
                Headers = _messageProducer.CreateHeader(new Dictionary<string, int>
                {
                    {MqHeader.DataType,headers.DataType.Value }
                })
            });
            await _messageProducer.ProduceAsync(ls, model);
            _logger.LogInformation($"【成功】Third推送(topic.property):IMEI<{imei}>,pushData:{JsonConvert.SerializeObject(model)}");
        }

        public async Task ProcessDataPushServer(string imei, object model, Dictionary<string, int> headers, string tag)
        {
            List<TopicModel> ls = new List<TopicModel>();
            ls.Add(new TopicModel()
            {
                Topic = "topic.push",
                Headers = _messageProducer.CreateHeader(headers)
            });
            await _messageProducer.ProduceAsync(ls, model);
            _logger.LogInformation($"【{tag}-成功】Third推送(topic.push):IMEI<{imei}>,Header<{JsonConvert.SerializeObject(headers)}>,pushData:{JsonConvert.SerializeObject(model)}");
        }

        public async Task ProcessFenceServer(string imei, object model, Dictionary<string, int> headers, string tag)
        {
            List<TopicModel> ls = new List<TopicModel>();
            ls.Add(new TopicModel()
            {
                Topic = "topic.push.fence",
                Headers = _messageProducer.CreateHeader(headers)
            });
            await _messageProducer.ProduceAsync(ls, model);
            _logger.LogInformation($"【{tag}-成功】Third推送(topic.push.fence):IMEI<{imei}>,Header<{JsonConvert.SerializeObject(headers)}>,pushData:{JsonConvert.SerializeObject(model)}");
        }

        public async Task ProcessThirdhServer(string imei, object model, Dictionary<string, int> headers, string tag)
        {
            List<TopicModel> ls = new List<TopicModel>();
            ls.Add(new TopicModel()
            {
                Topic = "topic.push.third",
                Headers = _messageProducer.CreateHeader(headers)
            });
            await _messageProducer.ProduceAsync(ls, model);
            _logger.LogInformation($"【{tag}-成功】Third推送(topic.push.third):IMEI<{imei}>,Header<{JsonConvert.SerializeObject(headers)}>,pushData:{JsonConvert.SerializeObject(model)}");
        }
    }
}