using Edge.Core.Processor;
using Edge.Core.Processor.Dispatcher.Attributes;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;

namespace Edge.Core.UniversalApi
{
    [MetaPartsDescriptor("ServiceEntry", "Used for host service discovery api.",
           IsSystemInternalComponent = true)]
    public class ServiceEntry : IAppProcessor
    {
        protected IServiceProvider services;
        public string MetaConfigName { get; set; } = "ServiceDiscovery";

        public ServiceEntry(IServiceProvider services)
        {
            this.services = services;
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="apiType">localmqtt, remotemqtt, webapi</param>
        /// <param name="tags"></param>
        /// <returns></returns>
        [UniversalApi(InputParametersExampleJson = "[\"localMqtt\",[\"Pump\",\"ATG\"]]")]
        public async Task<IEnumerable<UniversalApiInfoDoc>> ShowMeApi(string apiType, string[] tags)
        {
            var communicationProvider =
                this.services.GetService<UniversalApiHub>()?.CommunicationProviders?.Where(p => p.GetType().Name.Contains(apiType, StringComparison.OrdinalIgnoreCase))?.FirstOrDefault();
            if (communicationProvider == null)
                return Enumerable.Empty<UniversalApiInfoDoc>();
            return communicationProvider.GetApiDocuments().FilterByTags(tags);
        }

        public void Init(IEnumerable<IProcessor> processors)
        {
        }
    }
}