package com.l7tech.gateway.api;

import com.l7tech.gateway.api.impl.AccessorSupport;
import com.l7tech.gateway.api.impl.ElementExtendableAccessibleObject;
import jakarta.xml.bind.annotation.XmlElement;
import jakarta.xml.bind.annotation.XmlEnum;
import jakarta.xml.bind.annotation.XmlEnumValue;
import jakarta.xml.bind.annotation.XmlRootElement;
import jakarta.xml.bind.annotation.XmlType;

@XmlRootElement(name = "HttpConfiguration")
@XmlType(
   name = "HttpConfigurationType",
   propOrder = {
         "host",
         "port",
         "protocol",
         "path",
         "username",
         "passwordId",
         "ntlmHost",
         "ntlmDomain",
         "tlsVersion",
         "tlsKeyUse",
         "tlsKeystoreId",
         "tlsKeystoreAlias",
         "tlsCipherSuites",
         "connectTimeout",
         "readTimeout",
         "followRedirects",
         "proxyUse",
         "proxyConfiguration",
         "extensions",
         "extension"
   }
)
@AccessorSupport.AccessibleResource(name = "httpConfigurations")
public class HttpConfigurationMO extends ElementExtendableAccessibleObject {
   private String h;
   private int i;
   private HttpConfigurationMO.Protocol j;
   private String k;
   private String l;
   private String m;
   private String n;
   private String o;
   private String p;
   private HttpConfigurationMO.Option q;
   private String r;
   private String s;
   private String t;
   private int u;
   private int v;
   private boolean w;
   private HttpConfigurationMO.Option x;
   private HttpConfigurationMO.HttpProxyConfiguration y;

   HttpConfigurationMO() {
   }

   @XmlElement(name = "Host", required = true)
   public String getHost() {
      return this.h;
   }

   public void setHost(String var1) {
      this.h = var1;
   }

   @XmlElement(name = "Port", defaultValue = "0")
   public int getPort() {
      return this.i;
   }

   public void setPort(int var1) {
      this.i = var1;
   }

   @XmlElement(name = "Protocol", defaultValue = "any")
   public HttpConfigurationMO.Protocol getProtocol() {
      return this.j;
   }

   public void setProtocol(HttpConfigurationMO.Protocol var1) {
      this.j = var1;
   }

   @XmlElement(name = "Path")
   public String getPath() {
      return this.k;
   }

   public void setPath(String var1) {
      this.k = var1;
   }

   @XmlElement(name = "Username")
   public String getUsername() {
      return this.l;
   }

   public void setUsername(String var1) {
      this.l = var1;
   }

   @XmlElement(name = "PasswordId")
   public String getPasswordId() {
      return this.m;
   }

   public void setPasswordId(String var1) {
      this.m = var1;
   }

   @XmlElement(name = "NtlmHost")
   public String getNtlmHost() {
      return this.n;
   }

   public void setNtlmHost(String var1) {
      this.n = var1;
   }

   @XmlElement(name = "NtlmDomain")
   public String getNtlmDomain() {
      return this.o;
   }

   public void setNtlmDomain(String var1) {
      this.o = var1;
   }

   @XmlElement(name = "TlsVersion", defaultValue = "ANY")
   public String getTlsVersion() {
      return this.p;
   }

   public void setTlsVersion(String var1) {
      this.p = var1;
   }

   @XmlElement(name = "TlsKeyUse", defaultValue = "default")
   public HttpConfigurationMO.Option getTlsKeyUse() {
      return this.q;
   }

   public void setTlsKeyUse(HttpConfigurationMO.Option var1) {
      this.q = var1;
   }

   @XmlElement(name = "TlsKeystoreId")
   public String getTlsKeystoreId() {
      return this.r;
   }

   public void setTlsKeystoreId(String var1) {
      this.r = var1;
   }

   @XmlElement(name = "TlsKeystoreAlias")
   public String getTlsKeystoreAlias() {
      return this.s;
   }

   public void setTlsKeystoreAlias(String var1) {
      this.s = var1;
   }

   @XmlElement(name = "TlsCipherSuites")
   public String getTlsCipherSuites() {
      return this.t;
   }

   public void setTlsCipherSuites(String var1) {
      this.t = var1;
   }

   @XmlElement(name = "ConnectTimeout", defaultValue = "-1")
   public int getConnectTimeout() {
      return this.u;
   }

   public void setConnectTimeout(int var1) {
      this.u = var1;
   }

   @XmlElement(name = "ReadTimeout", defaultValue = "-1")
   public int getReadTimeout() {
      return this.v;
   }

   public void setReadTimeout(int var1) {
      this.v = var1;
   }

   @XmlElement(name = "FollowRedirects", defaultValue = "false")
   public boolean isFollowRedirects() {
      return this.w;
   }

   public void setFollowRedirects(boolean var1) {
      this.w = var1;
   }

   @XmlElement(name = "ProxyUse", defaultValue = "default")
   public HttpConfigurationMO.Option getProxyUse() {
      return this.x;
   }

   public void setProxyUse(HttpConfigurationMO.Option var1) {
      this.x = var1;
   }

   @XmlElement(name = "ProxyConfiguration")
   public HttpConfigurationMO.HttpProxyConfiguration getProxyConfiguration() {
      return this.y;
   }

   public void setProxyConfiguration(HttpConfigurationMO.HttpProxyConfiguration var1) {
      this.y = var1;
   }

   @XmlType(name = "HttpProxyConfigurationType", propOrder = {"host", "port", "username", "passwordId"})
   public static class HttpProxyConfiguration {
      private String a;
      private int b;
      private String c;
      private String d;

      @XmlElement(name = "Host")
      public String getHost() {
         return this.a;
      }

      public void setHost(String var1) {
         this.a = var1;
      }

      @XmlElement(name = "Port")
      public int getPort() {
         return this.b;
      }

      public void setPort(int var1) {
         this.b = var1;
      }

      @XmlElement(name = "Username")
      public String getUsername() {
         return this.c;
      }

      public void setUsername(String var1) {
         this.c = var1;
      }

      @XmlElement(name = "PasswordId")
      public String getPasswordId() {
         return this.d;
      }

      public void setPasswordId(String var1) {
         this.d = var1;
      }
   }

   @XmlEnum(String.class)
   @XmlType(name = "HttpConfigurationOptionType")
   public enum Option {
      @XmlEnumValue("default")
      DEFAULT,
      @XmlEnumValue("none")
      NONE,
      @XmlEnumValue("custom")
      CUSTOM;

      // $VF: Failed to inline enum fields
      // Please report this to the Vineflower issue tracker, at https://github.com/Vineflower/vineflower/issues with a copy of the class file (if you have the rights to distribute it!)
      static {
         String[] var0 = new String[3];
         int var4 = 0;
         String var3 = "\u0004 B/\u0001V\u0014\u0004\u000e*J+\u0006\u00030W:\u001bW";
         int var5 = "\u0004 B/\u0001V\u0014\u0004\u000e*J+\u0006\u00030W:\u001bW".length();
         char var2 = 7;
         int var1 = -1;

         while (true) {
            String var10002 = a(a(var3.substring(++var1, var1 + var2)));
            byte var10001 = -1;
            var0[var4++] = var10002;
            if ((var1 += var2) >= var5) {
               DEFAULT = new HttpConfigurationMO.Option();
               NONE = new HttpConfigurationMO.Option();
               CUSTOM = new HttpConfigurationMO.Option();
               return;
            }

            var2 = var3.charAt(var1);
         }
      }

      private static char[] a(String var0) {
         char[] var10000 = var0.toCharArray();
         if (var10000.length < 2) {
            var10000[0] = (char)(var10000[0] ^ 64);
         }

         return var10000;
      }

      private static String a(char[] var0) {
         int var10002 = var0.length;
         char[] var10001 = var0;
         int var10000 = var10002;

         for (int var1 = 0; var10000 > var1; var1++) {
            var10001[var1] = (char)(var10001[var1] ^ switch (var1 % 7) {
               case 0 -> 64;
               case 1 -> 101;
               case 2 -> 4;
               case 3 -> 110;
               case 4 -> 84;
               case 5 -> 26;
               default -> 64;
            });
         }

         return new String(var10001).intern();
      }
   }

   @XmlEnum(String.class)
   @XmlType(name = "HttpConfigurationProtocolType")
   public enum Protocol {
      @XmlEnumValue("any")
      ANY,
      @XmlEnumValue("http")
      HTTP,
      @XmlEnumValue("https")
      HTTPS;

      // $VF: Failed to inline enum fields
      // Please report this to the Vineflower issue tracker, at https://github.com/Vineflower/vineflower/issues with a copy of the class file (if you have the rights to distribute it!)
      static {
         String[] var0 = new String[3];
         int var4 = 0;
         String var3 = "87\u007f\u00051-r\\r\u00041-r\\";
         int var5 = "87\u007f\u00051-r\\r\u00041-r\\".length();
         char var2 = 3;
         int var1 = -1;

         while (true) {
            String var10002 = a(a(var3.substring(++var1, var1 + var2)));
            byte var10001 = -1;
            var0[var4++] = var10002;
            if ((var1 += var2) >= var5) {
               ANY = new HttpConfigurationMO.Protocol();
               HTTP = new HttpConfigurationMO.Protocol();
               HTTPS = new HttpConfigurationMO.Protocol();
               return;
            }

            var2 = var3.charAt(var1);
         }
      }

      private static char[] a(String var0) {
         char[] var10000 = var0.toCharArray();
         if (var10000.length < 2) {
            var10000[0] = (char)(var10000[0] ^ 102);
         }

         return var10000;
      }

      private static String a(char[] var0) {
         int var10002 = var0.length;
         char[] var10001 = var0;
         int var10000 = var10002;

         for (int var1 = 0; var10000 > var1; var1++) {
            var10001[var1] = (char)(var10001[var1] ^ switch (var1 % 7) {
               case 0 -> 121;
               case 1 -> 121;
               case 2 -> 38;
               case 3 -> 12;
               case 4 -> 33;
               case 5 -> 116;
               default -> 102;
            });
         }

         return new String(var10001).intern();
      }
   }
}
