package com.l7tech.gateway.api;

import com.l7tech.gateway.api.impl.AccessorSupport;
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.XmlAttribute;
import jakarta.xml.bind.annotation.XmlElement;
import jakarta.xml.bind.annotation.XmlRootElement;
import jakarta.xml.bind.annotation.XmlTransient;
import jakarta.xml.bind.annotation.XmlType;
import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

@XmlRootElement(name = "User")
@XmlType(
   name = "UserType",
   propOrder = {"login", "password", "firstName", "lastName", "email", "department", "subjectDn", "properties", "extension", "extensions"}
)
@AccessorSupport.AccessibleResource(name = "users")
public class UserMO extends AccessibleObject {
   private String f;
   private PasswordFormatted g;
   private String h;
   private String i;
   private String j;
   private String k;
   private String l;
   private String m;
   private Map<String, Object> n;
   private static final String[] o;

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

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

   @XmlElement(name = "Password")
   public PasswordFormatted getPassword() {
      return this.g;
   }

   public void setPassword(PasswordFormatted var1) {
      this.g = var1;
   }

   @XmlAttribute(required = true)
   public String getProviderId() {
      return this.m;
   }

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

   @XmlElement(name = "FirstName")
   public String getFirstName() {
      return this.h;
   }

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

   @XmlElement(name = "LastName")
   public String getLastName() {
      return this.i;
   }

   public void setLastName(String var1) {
      this.i = var1;
   }

   @XmlElement(name = "Email")
   public String getEmail() {
      return this.j;
   }

   public void setEmail(String var1) {
      this.j = var1;
   }

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

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

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

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

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

   protected void setProperties(Map<String, Object> var1) {
      this.n = var1;
   }

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

   @Override
   protected void setExtension(Extension var1) {
      super.setExtension(var1);
   }

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

   @XmlTransient
   public String getName() {
      return this.getProperty(o[6]);
   }

   public void setName(@Nullable String var1) {
      this.setProperty(o[2], var1);
   }

   public void setProperty(@NotNull String var1, @Nullable Object var2) {
      try {
         if (var1 == null) {
            b(0);
         }
      } catch (IllegalArgumentException var5) {
         throw var5;
      }

      try {
         if (this.n == null) {
            this.n = new HashMap<>();
         }
      } catch (IllegalArgumentException var3) {
         throw var3;
      }

      try {
         if (var2 == null) {
            this.n.remove(var1);
            return;
         }
      } catch (IllegalArgumentException var4) {
         throw var4;
      }

      this.n.put(var1, var2);
   }

   public <T> T getProperty(@NotNull String param1) {
      // $VF: Couldn't be decompiled
      // 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!)
      // java.lang.RuntimeException: parsing failure!
      //   at org.jetbrains.java.decompiler.modules.decompiler.decompose.DomHelper.parseGraph(DomHelper.java:211)
      //   at org.jetbrains.java.decompiler.main.rels.MethodProcessor.codeToJava(MethodProcessor.java:174)
      //
      // Bytecode:
      // 00: aload 1
      // 01: ifnonnull 0c
      // 04: bipush 1
      // 05: invokestatic com/l7tech/gateway/api/UserMO.b (I)V
      // 08: goto 0c
      // 0b: athrow
      // 0c: aload 0
      // 0d: getfield com/l7tech/gateway/api/UserMO.n Ljava/util/Map;
      // 10: ifnull 24
      // 13: aload 0
      // 14: getfield com/l7tech/gateway/api/UserMO.n Ljava/util/Map;
      // 17: aload 1
      // 18: invokeinterface java/util/Map.containsKey (Ljava/lang/Object;)Z 2
      // 1d: ifne 29
      // 20: goto 24
      // 23: athrow
      // 24: aconst_null
      // 25: goto 33
      // 28: athrow
      // 29: aload 0
      // 2a: getfield com/l7tech/gateway/api/UserMO.n Ljava/util/Map;
      // 2d: aload 1
      // 2e: invokeinterface java/util/Map.get (Ljava/lang/Object;)Ljava/lang/Object; 2
      // 33: areturn
      // try (0 -> 4): 5 java/lang/IllegalArgumentException
      // try (6 -> 14): 15 java/lang/IllegalArgumentException
      // try (9 -> 18): 18 java/lang/IllegalArgumentException
   }

   @XmlTransient
   public CertificateData getCertificateData() {
      return this.getUniqueExtension(new n(this));
   }

   public void setCertificateData(CertificateData var1) {
      this.setUniqueExtension(var1, new o(this));
   }

   UserMO() {
   }

   static {
      String[] var5 = new String[7];
      int var3 = 0;
      String var2 = "e%K\t4\u0006\u0004g2K >C2X,+\f\u001av`Y64I4L/K\u00173\u0005\u0018\"0^+'\u0004\u0011v%MyaL\u0007%`P?fL\u0007,eLy+\u001c\u0007v`Q62I\u0016g`Q,*\u0005\u0004l!R<\u001da/Rv*^\u0000g#Wv!\b\u0000g7^ i\b\u0004koj*#\u001b9M\u000bq%K\t4\u0006\u0004g2K ";
      int var4 = "e%K\t4\u0006\u0004g2K >C2X,+\f\u001av`Y64I4L/K\u00173\u0005\u0018\"0^+'\u0004\u0011v%MyaL\u0007%`P?fL\u0007,eLy+\u001c\u0007v`Q62I\u0016g`Q,*\u0005\u0004l!R<\u001da/Rv*^\u0000g#Wv!\b\u0000g7^ i\b\u0004koj*#\u001b9M\u000bq%K\t4\u0006\u0004g2K "
         .length();
      char var1 = 11;
      int var7 = -1;

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

         while (true) {
            String var12 = b(b(var10000));
            switch (var10001) {
               case 0:
                  var5[var3++] = var12;
                  if ((var7 += var1) >= var4) {
                     o = var5;
                     return;
                  }

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

                  var2 = "i%F\u0004l!R<";
                  var4 = "i%F\u0004l!R<".length();
                  var1 = 3;
                  var7 = -1;
            }

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

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

      return var10000;
   }

   private static String b(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 -> 2;
            case 1 -> 64;
            case 2 -> 63;
            case 3 -> 89;
            case 4 -> 70;
            case 5 -> 105;
            default -> 116;
         });
      }

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