package com.l7tech.server.util;

import com.l7tech.common.http.GenericHttpClient;
import com.l7tech.common.http.GenericHttpClientFactory;
import com.l7tech.common.http.HttpProxyConfig;
import com.l7tech.common.http.prov.apache.components.ClientConnectionManagerFactory;
import com.l7tech.common.http.prov.apache.components.HttpComponentsClient;
import com.l7tech.common.http.prov.apache.components.ClientConnectionManagerFactory.ConnectionManagerType;
import com.l7tech.server.transport.http.HttpConnectionManagerListener;
import org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManager;
import org.apache.hc.client5.http.io.HttpClientConnectionManager;
import org.apache.hc.core5.pool.PoolStats;

public class IdentityBindingHttpClientFactory implements GenericHttpClientFactory {
   private HttpClientConnectionManager a;
   private HttpConnectionManagerListener b = new HttpConnectionManagerListener.HttpConnectionManagerListenerAdapter();
   private boolean c;

   public GenericHttpClient createHttpClient() {
      return this.createHttpClient(-1, -1, -1, -1, -1, null, null);
   }

   public GenericHttpClient createHttpClient(int var1, int var2, int var3, int var4, int var5, Object var6, HttpProxyConfig var7) {
      return new HttpComponentsClient(this.a(var1, var2), var6, var3, var4, var5, var7);
   }

   public void setListener(HttpConnectionManagerListener var1) {
      this.b = var1 == null ? new HttpConnectionManagerListener.HttpConnectionManagerListenerAdapter() : var1;
   }

   public void setUseHttp10(boolean var1) {
      this.c = var1;
   }

   private HttpClientConnectionManager a(int var1, int var2) {
      if (this.a == null) {
         if (var1 <= 0) {
            var1 = HttpComponentsClient.getDefaultMaxConnectionsPerHost();
            var2 = HttpComponentsClient.getDefaultMaxTotalConnections();
         }

         ClientConnectionManagerFactory var3 = ClientConnectionManagerFactory.getInstance();
         this.a = var3.createConnectionManager(ConnectionManagerType.IDENTITY_BINDING, var1, var2, this.c);
         this.b.notifyHttpConnectionManagerCreated(this.a);
      }

      return this.a;
   }

   protected PoolStats getTotalStats() {
      return this.a == null ? null : ((PoolingHttpClientConnectionManager)this.a).getTotalStats();
   }
}
