package com.l7tech.gateway.api;

import com.l7tech.gateway.api.impl.ElementExtensionSupport;
import jakarta.xml.bind.annotation.XmlAnyElement;
import jakarta.xml.bind.annotation.XmlElement;
import jakarta.xml.bind.annotation.XmlEnum;
import jakarta.xml.bind.annotation.XmlEnumValue;
import jakarta.xml.bind.annotation.XmlType;
import java.util.ArrayList;
import java.util.List;
import org.jetbrains.annotations.Nullable;

@XmlType(
   name = "RevocationCheckingPolicyItem",
   propOrder = {"type", "url", "allowIssuerSignature", "includeNonce", "trustedSigners", "extension", "extensions"}
)
public class RevocationCheckingPolicyItemMO extends ElementExtensionSupport {
   private RevocationCheckingPolicyItemMO.Type d;
   private String e;
   private boolean f = false;
   private Boolean g = Boolean.TRUE;
   private List<String> h = new ArrayList<>();

   @XmlElement(name = "Type", required = true)
   public RevocationCheckingPolicyItemMO.Type getType() {
      return this.d;
   }

   public void setType(RevocationCheckingPolicyItemMO.Type var1) {
      this.d = var1;
   }

   @XmlElement(name = "Url", required = true)
   public String getUrl() {
      return this.e;
   }

   public void setUrl(String var1) {
      this.e = var1;
   }

   @XmlElement(name = "AllowIssuerSignature")
   public boolean isAllowIssuerSignature() {
      return this.f;
   }

   public void setAllowIssuerSignature(boolean var1) {
      this.f = var1;
   }

   @XmlElement(name = "IncludeNonce", nillable = true)
   @Nullable
   public Boolean getIncludeNonce() {
      return this.g;
   }

   public void setIncludeNonce(@Nullable Boolean var1) {
      this.g = var1;
   }

   @XmlElement(name = "TrustedSigners")
   public List<String> getTrustedSigners() {
      return new ArrayList<>(this.h);
   }

   public void setTrustedSigners(List<String> var1) {
      if (var1 == null) {
         this.h = new ArrayList<>();
      } else {
         this.h = new ArrayList<>(var1);
      }
   }

   @XmlAnyElement(lax = true)
   @Override
   protected List<Object> getExtensions() {
      return super.getExtensions();
   }

   RevocationCheckingPolicyItemMO() {
   }

   @XmlEnum(String.class)
   @XmlType(name = "RevocationCheckingPolicyItemType")
   public enum Type {
      @XmlEnumValue("CRL from certificate URL")
      CRL_FROM_CERTIFICATE,
      @XmlEnumValue("CRL from URL")
      CRL_FROM_URL,
      @XmlEnumValue("OCSP from certificate URL")
      OCSP_FROM_CERTIFICATE,
      @XmlEnumValue("OCSP from URL")
      OCSP_FROM_URL;

      // $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[4];
         int var4 = 0;
         String var3 = "_\u0019*Dz\u000ebQ\u0014%^n\bdZ\u0002%Zh\u0019\rS\b5Kc\u001a\u007fS\u00069Nn\u0010";
         int var5 = "_\u0019*Dz\u000ebQ\u0014%^n\bdZ\u0002%Zh\u0019\rS\b5Kc\u001a\u007fS\u00069Nn\u0010".length();
         char var2 = 20;
         int var7 = -1;

         label25:
         while (true) {
            String var10000 = var3.substring(++var7, var7 + var2);
            byte var10001 = -1;

            while (true) {
               String var12 = a(a(var10000));
               switch (var10001) {
                  case 0:
                     var0[var4++] = var12;
                     if ((var7 += var2) >= var5) {
                        CRL_FROM_CERTIFICATE = new RevocationCheckingPolicyItemMO.Type();
                        CRL_FROM_URL = new RevocationCheckingPolicyItemMO.Type();
                        OCSP_FROM_CERTIFICATE = new RevocationCheckingPolicyItemMO.Type();
                        OCSP_FROM_URL = new RevocationCheckingPolicyItemMO.Type();
                        return;
                     }

                     var2 = var3.charAt(var7);
                     break;
                  default:
                     var0[var4++] = var12;
                     if ((var7 += var2) < var5) {
                        var2 = var3.charAt(var7);
                        continue label25;
                     }

                     var3 = "S\b5Kc\u001a\u007fS\u00069Xy\u000eyU\r/X}\bh\f_\u0019*Dz\u000ebQ\u00143Ip";
                     var5 = "S\b5Kc\u001a\u007fS\u00069Xy\u000eyU\r/X}\bh\f_\u0019*Dz\u000ebQ\u00143Ip".length();
                     var2 = 21;
                     var7 = -1;
               }

               var10000 = var3.substring(++var7, var7 + var2);
               var10001 = 0;
            }
         }
      }

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

         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 -> 28;
               case 1 -> 75;
               case 2 -> 102;
               case 3 -> 27;
               case 4 -> 60;
               case 5 -> 92;
               default -> 45;
            });
         }

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