
using System.Collections.Concurrent;
using Aliyun.Api.LogService;
using Cloud.Alibaba.Oss;

namespace Cloud.Alibaba.Sls
{
    public class ClientManager
    {
        private static readonly ConcurrentDictionary<string, ILogServiceClient> ClientCache = new ConcurrentDictionary<string, ILogServiceClient>();
        
        public static ILogServiceClient GetClient(Account account, SlsProject project)
        {
            string cacheKey = GetCacheKey(account, project);

            ILogServiceClient result = ClientCache.GetOrAdd(cacheKey, (key) =>
            {
                AccountConfig accountConfig = AccountConfig.GetConfig(account);
                SlsProjectConfig projectConfig = SlsProjectConfig.GetConfig(project);

                return LogServiceClientBuilders.HttpBuilder
                    .Endpoint(projectConfig.Endpoint, projectConfig.ProjectName)
                    .Credential(accountConfig.AccessKey, accountConfig.SecretKey)
                    .Build();
            });
            
            return result;
        }

        private static string GetCacheKey(Account account, SlsProject project)
        {
            return $"{account}_{project}";
        }

    }

}
