using FastGithub.Configuration;
using FastGithub.DomainResolve;
using Microsoft.Extensions.Options;
using System.Collections.Concurrent;
namespace FastGithub.Http
{
    /// 
    /// HttpClient工厂
    /// 
    sealed class HttpClientFactory : IHttpClientFactory
    {
        private readonly IDomainResolver domainResolver;
        private ConcurrentDictionary domainHandlers = new();
        /// 
        /// HttpClient工厂
        /// 
        /// 
        /// 
        public HttpClientFactory(
            IDomainResolver domainResolver,
            IOptionsMonitor options)
        {
            this.domainResolver = domainResolver;
            options.OnChange(opt => this.domainHandlers = new());
        }
        /// 
        /// 创建httpClient
        /// 
        /// 
        /// 
        public HttpClient CreateHttpClient(DomainConfig domainConfig)
        {
            var httpClientHandler = this.domainHandlers.GetOrAdd(domainConfig, config => new HttpClientHandler(config, this.domainResolver));
            return new HttpClient(httpClientHandler, disposeHandler: false);
        }
    }
}