using System;
using System.Collections.Generic;

namespace Alibabacloud.Rum.Unity.Worker
{
    public interface IAlibabacloudWorkerProcessor
    {
        public void Process(IAlibabacloudWorkerMessage message);
    }
    
    public interface IAlibabacloudWorkerMessage
    {
        public string FeatureTarget { get; }

        public void Discard();
    }
    public abstract class AlibabacloudWorker
    {
        private readonly Dictionary<string, IAlibabacloudWorkerProcessor> _processors = new();
        
        public abstract void Start();
        public abstract void Stop();
        public abstract void AddMessage(IAlibabacloudWorkerMessage message);

        public void AddProcessor(string feature, IAlibabacloudWorkerProcessor processor)
        {
            if (_processors.ContainsKey(feature))
            {
                return;
            }
            _processors.Add(feature, processor);
        }

        protected void HandleMessage(IAlibabacloudWorkerMessage message)
        {
            if (_processors.ContainsKey(message.FeatureTarget))
            {
                var processor = _processors[message.FeatureTarget];
                
                processor?.Process(message);
                
            }
            else
            {
                // todo log 
            }
            message.Discard();
        }
        
    }
}
