package com.l7tech.policy;

import com.l7tech.objectmodel.imp.NamedEntityImp;
import com.l7tech.security.rbac.RbacAttribute;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.Inheritance;
import jakarta.persistence.InheritanceType;
import jakarta.persistence.Lob;
import jakarta.persistence.Table;
import jakarta.persistence.Transient;
import jakarta.xml.bind.annotation.XmlRootElement;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import org.hibernate.annotations.Proxy;

@XmlRootElement
@Entity
@Proxy(lazy = false)
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@Table(name = "generic_entity")
public class GenericEntity extends NamedEntityImp {
   private String description;
   private String entityClassName;
   private String valueXml;
   private boolean enabled = true;
   static final long serialVersionUID = 5908114099401835342L;
   private static final String[] b;

   public GenericEntity() {
      this.entityClassName = this.getClass().getName();
   }

   public static void copyBaseFields(GenericEntity var0, GenericEntity var1) {
      var1.setGoid(var0.getGoid());
      var1.setVersion(var0.getVersion());
      var1.setName(var0.getName());
      var1.setDescription(var0.getDescription());
      var1.setEnabled(var0.isEnabled());
      var1.setEntityClassName(var0.getEntityClassName());
      var1.setValueXml(var0.getValueXml());
   }

   @RbacAttribute
   @Size(min = 1, max = 255)
   @Transient
   @Override
   public String getName() {
      return super.getName();
   }

   @RbacAttribute
   @Size(min = 0, max = 131072)
   @Column(name = "description", length = Integer.MAX_VALUE)
   @Lob
   public final String getDescription() {
      return this.description;
   }

   public final void setDescription(String var1) {
      this.description = var1;
   }

   @RbacAttribute
   @NotNull
   @Size(min = 1, max = 255)
   @Column(name = "classname", length = 255)
   public final String getEntityClassName() {
      return this.entityClassName;
   }

   public final void setEntityClassName(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 0
      // 01: invokevirtual java/lang/Object.getClass ()Ljava/lang/Class;
      // 04: astore 2
      // 05: ldc com/l7tech/policy/GenericEntity
      // 07: aload 2
      // 08: if_acmpeq 3d
      // 0b: aload 2
      // 0c: invokevirtual java/lang/Class.getName ()Ljava/lang/String;
      // 0f: aload 1
      // 10: invokevirtual java/lang/String.equals (Ljava/lang/Object;)Z
      // 13: ifne 3d
      // 16: goto 1d
      // 19: invokestatic com/l7tech/policy/GenericEntity.b (Ljava/lang/IllegalArgumentException;)Ljava/lang/IllegalArgumentException;
      // 1c: athrow
      // 1d: new java/lang/IllegalArgumentException
      // 20: dup
      // 21: aload 2
      // 22: invokevirtual java/lang/Class.getName ()Ljava/lang/String;
      // 25: getstatic com/l7tech/policy/GenericEntity.b [Ljava/lang/String;
      // 28: bipush 1
      // 29: aaload
      // 2a: swap
      // 2b: getstatic com/l7tech/policy/GenericEntity.b [Ljava/lang/String;
      // 2e: bipush 0
      // 2f: aaload
      // 30: invokedynamic makeConcatWithConstants (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; bsm=java/lang/invoke/StringConcatFactory.makeConcatWithConstants (Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/invoke/CallSite; args=[ "\u0001\u0001\u0001" ]
      // 35: invokespecial java/lang/IllegalArgumentException.<init> (Ljava/lang/String;)V
      // 38: athrow
      // 39: invokestatic com/l7tech/policy/GenericEntity.b (Ljava/lang/IllegalArgumentException;)Ljava/lang/IllegalArgumentException;
      // 3c: athrow
      // 3d: aload 0
      // 3e: aload 1
      // 3f: putfield com/l7tech/policy/GenericEntity.entityClassName Ljava/lang/String;
      // 42: return
      // try (3 -> 11): 12 java/lang/IllegalArgumentException
      // try (6 -> 28): 28 java/lang/IllegalArgumentException
   }

   @RbacAttribute
   @Column(name = "enabled")
   public boolean isEnabled() {
      return this.enabled;
   }

   public void setEnabled(boolean var1) {
      this.enabled = var1;
   }

   @NotNull
   @Size(min = 0, max = 131072)
   @Column(name = "value_xml", nullable = false, length = Integer.MAX_VALUE)
   @Lob
   public final String getValueXml() {
      return this.valueXml;
   }

   public final void setValueXml(String var1) {
      this.valueXml = var1;
   }

   private static IllegalArgumentException b(IllegalArgumentException var0) {
      return var0;
   }

   static {
      String[] var5 = new String[2];
      int var3 = 0;
      String var2 = "CDh8\u0018\u0013H\nQ')W\tC\u0011Gs/\u0018\u0014U\u0001Ak+K\u0014\u0000\fD'\r]\tE\u0011Kd\u000fV\u0013I\u0017[\u001d&Ls#L\u001e\u0000\u0000Nf9K\tA\u000eG''Y\u001e\u0000\fLk3\u0018\u0005EC";
      int var4 = "CDh8\u0018\u0013H\nQ')W\tC\u0011Gs/\u0018\u0014U\u0001Ak+K\u0014\u0000\fD'\r]\tE\u0011Kd\u000fV\u0013I\u0017[\u001d&Ls#L\u001e\u0000\u0000Nf9K\tA\u000eG''Y\u001e\u0000\fLk3\u0018\u0005EC"
         .length();
      char var1 = ',';
      int var0 = -1;

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

         var1 = var2.charAt(var0);
      }
   }

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

      return var10000;
   }

   private static String b(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 -> 73;
            case 1 -> 8;
            case 2 -> 45;
            case 3 -> 96;
            case 4 -> 18;
            case 5 -> 77;
            default -> 10;
         });
      }

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