using HealthMonitor.Service.Resolver;
using HealthMonitor.Service.Resolver.Interface;
using HealthMonitor.Service.Sub.Topic.Model;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace HealthMonitor.Service.Sub
{
    public class MsgQueueManager: ConcurrentQueue<PackageMsgModel>
    {
        private readonly ILogger<MsgQueueManager> _logger;
        private readonly BloodpressResolver _resolverBloodpress;
        private readonly PregnancyHeartRateResolver _resolverPregnacyHeartRate;

        //private const string BP = nameof(TopicHmBloodPress).ToLower();
        


        public MsgQueueManager(ILogger<MsgQueueManager> logger, 
            BloodpressResolver resolverBloodpress,
            PregnancyHeartRateResolver pregnacyHeartRateResolver) 
        { 
            _logger = logger;
            _resolverBloodpress = resolverBloodpress;
            _resolverPregnacyHeartRate = pregnacyHeartRateResolver;
        }

        //public IResolver? GetMsgResolver()
        //{ 
        //    TryDequeue(out var msg);
        //    if (msg == null)
        //    {
        //        return null;
        //    }
        //    _resolver.SetResolveInfo(msg);

        //    return _resolver;
        //}

        public IResolver? GetMsgResolver(PackageMsgModel msg)
        {
            if (msg == null) return null;
            //switch (msg.Topic)
            //{
            //    case BP:
            //        _resolverBloodpress.SetResolveInfo(msg);
            //        return _resolverBloodpress;
            //    default:
            //        return null;
            //}

            if (msg.Topic.Equals(nameof(TopicHmBloodPress).ToLower()))
            {
                _resolverBloodpress.SetResolveInfo(msg);
                return _resolverBloodpress;
            }

            if (msg.Topic.Equals(nameof(TopicHmPregnancyHeartRate).ToLower()))
            {
                _resolverPregnacyHeartRate.SetResolveInfo(msg);
                return _resolverPregnacyHeartRate;
            }
            return null;

            
        }
    }
}