package com.l7tech.gateway.api;

import com.l7tech.gateway.api.impl.AccessorSupport;
import com.l7tech.gateway.api.impl.AttributeExtensibleType;
import com.l7tech.gateway.api.impl.Extension;
import com.l7tech.gateway.api.impl.PropertiesMapType;
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.XmlRootElement;
import jakarta.xml.bind.annotation.XmlType;
import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
import java.util.List;
import java.util.Map;

@XmlRootElement(name = "ServerModuleFile")
@XmlType(
   name = "ServerModuleFileType",
   propOrder = {"name", "moduleType", "moduleSha256", "moduleDataValue", "signatureProperties", "properties", "extension", "extensions"}
)
@AccessorSupport.AccessibleResource(name = "serverModuleFiles")
public class ServerModuleFileMO extends AccessibleObject {
   private String f;
   private ServerModuleFileMO.ServerModuleFileModuleType g;
   private String h;
   private AttributeExtensibleType.AttributeExtensibleByteArray i;
   private Map<String, String> j;
   private Map<String, String> k;

   @XmlElement(name = "Name", required = true)
   public String getName() {
      return this.f;
   }

   public void setName(String var1) {
      this.f = var1;
   }

   @XmlElement(name = "ModuleType", required = true)
   public ServerModuleFileMO.ServerModuleFileModuleType getModuleType() {
      return this.g;
   }

   public void setModuleType(ServerModuleFileMO.ServerModuleFileModuleType var1) {
      this.g = var1;
   }

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

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

   public byte[] getModuleData() {
      return AttributeExtensibleType.get(this.i);
   }

   public void setModuleData(byte[] var1) {
      this.i = AttributeExtensibleType.set(this.i, var1);
   }

   @XmlElement(name = "Properties")
   @XmlJavaTypeAdapter(PropertiesMapType.PropertiesMapTypeAdapter.class)
   public Map<String, String> getProperties() {
      return this.j;
   }

   public void setProperties(Map<String, String> var1) {
      this.j = var1;
   }

   @XmlElement(name = "Signature")
   @XmlJavaTypeAdapter(PropertiesMapType.PropertiesMapTypeAdapter.class)
   public Map<String, String> getSignatureProperties() {
      return this.k;
   }

   public void setSignatureProperties(Map<String, String> var1) {
      this.k = var1;
   }

   @XmlElement(name = "Extension")
   @Override
   protected Extension getExtension() {
      return super.getExtension();
   }

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

   @XmlElement(name = "ModuleData")
   protected AttributeExtensibleType.AttributeExtensibleByteArray getModuleDataValue() {
      return this.i;
   }

   protected void setModuleDataValue(AttributeExtensibleType.AttributeExtensibleByteArray var1) {
      this.i = var1;
   }

   ServerModuleFileMO() {
   }

   @XmlEnum(String.class)
   @XmlType(name = "ServerModuleFileModuleTypeType")
   public enum ServerModuleFileModuleType {
      @XmlEnumValue("Modular Assertion")
      MODULAR_ASSERTION,
      @XmlEnumValue("Custom Assertion")
      CUSTOM_ASSERTION;

      // $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[2];
         int var4 = 0;
         String var3 = "\u0017Qm^N \u0010\u0015WmOS9\u0006\u001bJ\u0011\u0019Kz_M,\u001d\u000bEmYD?\u001b\u001dKp";
         int var5 = "\u0017Qm^N \u0010\u0015WmOS9\u0006\u001bJ\u0011\u0019Kz_M,\u001d\u000bEmYD?\u001b\u001dKp".length();
         char var2 = 16;
         int var1 = -1;

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

            var2 = var3.charAt(var1);
         }
      }

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

         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 -> 84;
               case 1 -> 4;
               case 2 -> 62;
               case 3 -> 10;
               case 4 -> 1;
               case 5 -> 109;
               default -> 79;
            });
         }

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