package com.l7tech.xml;

import com.l7tech.objectmodel.Goid;
import com.l7tech.objectmodel.migration.Migration;
import com.l7tech.objectmodel.migration.MigrationMappingSelection;
import com.l7tech.objectmodel.migration.PropertyResolver;
import com.l7tech.policy.assertion.PrivateKeyable;
import com.l7tech.policy.assertion.PrivateKeyableSupport;
import com.l7tech.policy.variable.Syntax;
import com.l7tech.util.NameValuePair;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Set;
import java.util.TreeSet;

public class SoapFaultLevel implements PrivateKeyable, Serializable {
   public static final int DROP_CONNECTION = 0;
   public static final int TEMPLATE_FAULT = 1;
   public static final int GENERIC_FAULT = 2;
   public static final int MEDIUM_DETAIL_FAULT = 3;
   public static final int FULL_TRACE_FAULT = 4;
   private int level = 2;
   private String faultTemplate;
   private String faultTemplateCustomContentType;
   private String faultTemplateContentType;
   private String faultTemplateHttpStatus;
   private boolean includePolicyDownloadURL = true;
   private boolean signSoapFault = false;
   private boolean alwaysReturnSoapFault = false;
   private PrivateKeyableSupport privatekeyableSupport = new PrivateKeyableSupport();
   private String[] variablesUsed = new String[0];
   private NameValuePair[] extraHeaders = null;
   private boolean useClientFault = false;
   static final long serialVersionUID = -5506430417320744450L;
   private static final String[] a;

   public SoapFaultLevel() {
   }

   public SoapFaultLevel(SoapFaultLevel var1) {
      if (var1 != null) {
         this.level = var1.level;
         this.faultTemplate = var1.faultTemplate;
         this.faultTemplateCustomContentType = var1.faultTemplateCustomContentType;
         this.includePolicyDownloadURL = var1.includePolicyDownloadURL;
         this.signSoapFault = var1.signSoapFault;
         this.variablesUsed = var1.variablesUsed;
         this.privatekeyableSupport = new PrivateKeyableSupport(var1.privatekeyableSupport);
         this.alwaysReturnSoapFault = var1.isAlwaysReturnSoapFault();
         this.extraHeaders = this.copyHeaders(var1.extraHeaders);
      }
   }

   public int getLevel() {
      return this.level;
   }

   public void setLevel(int var1) {
      this.level = var1;
   }

   public String getFaultTemplate() {
      return this.faultTemplate;
   }

   public void setFaultTemplate(String var1) {
      this.faultTemplate = var1;
      this.updateVariableUse();
   }

   public String getFaultTemplateCustomContentType() {
      return this.faultTemplateCustomContentType;
   }

   public void setFaultTemplateCustomContentType(String var1) {
      this.faultTemplateCustomContentType = var1;
      this.updateVariableUse();
   }

   public NameValuePair[] getExtraHeaders() {
      return this.extraHeaders;
   }

   public void setExtraHeaders(NameValuePair[] var1) {
      this.extraHeaders = var1;
      this.updateVariableUse();
   }

   public String getFaultTemplateContentType() {
      return this.faultTemplateContentType;
   }

   public void setFaultTemplateContentType(String var1) {
      this.faultTemplateContentType = var1;
      this.updateVariableUse();
   }

   public String getFaultTemplateHttpStatus() {
      return this.faultTemplateHttpStatus;
   }

   public void setFaultTemplateHttpStatus(String var1) {
      this.faultTemplateHttpStatus = var1;
      this.updateVariableUse();
   }

   public boolean isIncludePolicyDownloadURL() {
      return this.includePolicyDownloadURL;
   }

   public void setIncludePolicyDownloadURL(boolean var1) {
      this.includePolicyDownloadURL = var1;
   }

   public boolean isSignSoapFault() {
      return this.signSoapFault;
   }

   public void setSignSoapFault(boolean var1) {
      this.signSoapFault = var1;
   }

   public boolean isAlwaysReturnSoapFault() {
      return this.alwaysReturnSoapFault;
   }

   public void setAlwaysReturnSoapFault(boolean var1) {
      this.alwaysReturnSoapFault = var1;
   }

   @Override
   public String getKeyAlias() {
      return this.privatekeyableSupport.getKeyAlias();
   }

   @Override
   public void setKeyAlias(String var1) {
      this.privatekeyableSupport.setKeyAlias(var1);
   }

   @Migration(mapName = MigrationMappingSelection.REQUIRED, export = false, resolver = PropertyResolver.Type.SSGKEY)
   @Override
   public Goid getNonDefaultKeystoreId() {
      return this.privatekeyableSupport.getNonDefaultKeystoreId();
   }

   @Override
   public void setNonDefaultKeystoreId(Goid var1) {
      this.privatekeyableSupport.setNonDefaultKeystoreId(var1);
   }

   @Override
   public boolean isUsesDefaultKeyStore() {
      return this.privatekeyableSupport.isUsesDefaultKeyStore();
   }

   @Override
   public void setUsesDefaultKeyStore(boolean var1) {
      this.privatekeyableSupport.setUsesDefaultKeyStore(var1);
   }

   @Override
   public String toString() {
      String var10000 = this.getClass().getName();
      String var1 = this.faultTemplate;
      boolean var2 = this.includePolicyDownloadURL;
      int var3 = this.level;
      String[] var4 = a;
      return var10000 + var4[0] + var3 + var4[2] + var2 + var4[1] + var1;
   }

   public String[] getVariablesUsed() {
      return this.variablesUsed;
   }

   private void updateVariableUse() {
      TreeSet var1 = new TreeSet<>(String.CASE_INSENSITIVE_ORDER);
      this.addVariables(var1, this.faultTemplateHttpStatus);
      this.addVariables(var1, this.faultTemplateContentType);
      this.addVariables(var1, this.faultTemplate);
      this.addVariables(var1, this.faultTemplateContentType);
      if (this.extraHeaders != null) {
         for (NameValuePair var5 : this.extraHeaders) {
            this.addVariables(var1, var5.getKey());
            this.addVariables(var1, var5.getValue());
         }
      }

      this.variablesUsed = var1.toArray(new String[var1.size()]);
   }

   private void addVariables(Set<String> var1, String var2) {
      if (var2 != null) {
         String[] var3 = Syntax.getReferencedNames(var2);
         if (var3 != null) {
            var1.addAll(Arrays.asList(var3));
         }
      }
   }

   private NameValuePair[] copyHeaders(NameValuePair[] var1) {
      if (var1 == null) {
         return null;
      }

      ArrayList var2 = new ArrayList();

      for (NameValuePair var6 : var1) {
         var2.add(new NameValuePair(var6.getKey(), var6.getValue()));
      }

      return var2.toArray(new NameValuePair[var2.size()]);
   }

   public boolean isUseClientFault() {
      return this.useClientFault;
   }

   public void setUseClientFault(boolean var1) {
      this.useClientFault = var1;
   }

   static {
      String[] var5 = new String[3];
      int var3 = 0;
      String var2 = "r\u0001/S\fu\\f\u0001\fp\u00017S\u0017`\\=U\u0006\fZ\u000fp\u0001*X\u0019|E8DCc(\\\n|";
      int var4 = "r\u0001/S\fu\\f\u0001\fp\u00017S\u0017`\\=U\u0006\fZ\u000fp\u0001*X\u0019|E8DCc(\\\n|".length();
      char var1 = '\t';
      int var0 = -1;

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

         var1 = var2.charAt(var0);
      }
   }

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

      return var10000;
   }

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

      for (int var2 = 0; var10000 > var2; var2++) {
         var10001[var2] = (char)(var10001[var2] ^ var10002 ^ switch (var2 % 7) {
            case 0 -> 112;
            case 1 -> 13;
            case 2 -> 79;
            case 3 -> 26;
            case 4 -> 86;
            case 5 -> 60;
            default -> 28;
         });
      }

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