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

@XmlRootElement(name = "LogSink")
@XmlType(
   name = "LogSinkType",
   propOrder = {"name", "description", "type", "categories", "enabled", "severity", "syslogHostValues", "filters", "properties", "extension", "extensions"}
)
@AccessorSupport.AccessibleResource(name = "LogSinks")
public class LogSinkMO extends ElementExtendableAccessibleObject {
   private String h;
   private String i;
   private LogSinkMO.SinkType j;
   private boolean k;
   private LogSinkMO.SeverityThreshold l;
   private List<LogSinkMO.Category> m;
   private AttributeExtensibleType.AttributeExtensibleStringList n;
   private List<LogSinkFilter> o;
   private Map<String, String> p;

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

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

   @XmlElement(name = "Description", required = true)
   public String getDescription() {
      return this.i;
   }

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

   @XmlElement(name = "Type", required = true)
   public LogSinkMO.SinkType getType() {
      return this.j;
   }

   public void setType(LogSinkMO.SinkType var1) {
      this.j = var1;
   }

   @XmlElement(name = "Enabled", required = true)
   public boolean isEnabled() {
      return this.k;
   }

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

   @XmlElement(name = "Severity", required = true)
   public LogSinkMO.SeverityThreshold getSeverity() {
      return this.l;
   }

   public void setSeverity(LogSinkMO.SeverityThreshold var1) {
      this.l = var1;
   }

   @XmlElementWrapper(name = "Categories", required = true)
   @XmlElement(name = "Category", required = true)
   public List<LogSinkMO.Category> getCategories() {
      return this.m;
   }

   public void setCategories(List<LogSinkMO.Category> var1) {
      this.m = var1;
   }

   public List<String> getSyslogHosts() {
      return AttributeExtensibleType.unwrap(AttributeExtensibleType.get(this.n, new ArrayList()));
   }

   public void setSyslogHosts(List<String> var1) {
      this.n = AttributeExtensibleType.set(this.n, AttributeExtensibleType.wrap(var1, AttributeExtensibleType.AttributeExtensibleStringBuilder));
   }

   @XmlElement(name = "SyslogHosts")
   protected AttributeExtensibleType.AttributeExtensibleStringList getSyslogHostValues() {
      return this.n;
   }

   protected void setSyslogHostValues(AttributeExtensibleType.AttributeExtensibleStringList var1) {
      this.n = var1;
   }

   @XmlElementWrapper(name = "Filters", required = true)
   @XmlElement(name = "Filter")
   public List<LogSinkFilter> getFilters() {
      return this.o;
   }

   public void setFilters(List<LogSinkFilter> var1) {
      this.o = var1;
   }

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

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

   LogSinkMO() {
   }

   @XmlType(name = "CategoryType")
   public enum Category {
      LOG,
      TRAFFIC,
      AUDIT,
      SSPC;

      // $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 = "'h`\u0007?ufs\t-\u0015";
         int var5 = "'h`\u0007?ufs\t-\u0015".length();
         char var2 = 3;
         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) {
                        LOG = new LogSinkMO.Category();
                        TRAFFIC = new LogSinkMO.Category();
                        AUDIT = new LogSinkMO.Category();
                        SSPC = new LogSinkMO.Category();
                        return;
                     }

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

                     var3 = "*rc|\u001b\u00048twv";
                     var5 = "*rc|\u001b\u00048twv".length();
                     var2 = 5;
                     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] ^ 86);
         }

         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 -> 107;
               case 1 -> 39;
               case 2 -> 39;
               case 3 -> 53;
               case 4 -> 79;
               case 5 -> 100;
               default -> 86;
            });
         }

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

   @XmlType(name = "SeverityThresholdType")
   public enum SeverityThreshold {
      ALL,
      FINEST,
      FINER,
      FINE,
      CONFIG,
      INFO,
      WARNING,
      SEVERE;

      // $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[8];
         int var4 = 0;
         String var3 = "%=QFr'\u000601IFs6\u000374K\u000501IFr\u000401IF\u000657IEi%";
         int var5 = "%=QFr'\u000601IFs6\u000374K\u000501IFr\u000401IF\u000657IEi%".length();
         char var2 = 6;
         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) {
                        ALL = new LogSinkMO.SeverityThreshold();
                        FINEST = new LogSinkMO.SeverityThreshold();
                        FINER = new LogSinkMO.SeverityThreshold();
                        FINE = new LogSinkMO.SeverityThreshold();
                        CONFIG = new LogSinkMO.SeverityThreshold();
                        INFO = new LogSinkMO.SeverityThreshold();
                        WARNING = new LogSinkMO.SeverityThreshold();
                        SEVERE = new LogSinkMO.SeverityThreshold();
                        return;
                     }

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

                     var3 = "?6AL\u0007!9UMi,v";
                     var5 = "?6AL\u0007!9UMi,v".length();
                     var2 = 4;
                     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] ^ 49);
         }

         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 -> 118;
               case 1 -> 120;
               case 2 -> 7;
               case 3 -> 3;
               case 4 -> 32;
               case 5 -> 98;
               default -> 49;
            });
         }

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

   @XmlType(name = "SinkTypeType")
   public enum SinkType {
      FILE,
      SYSLOG;

      // $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 = "-S\u000f\u0013=n\u00048C\u0010\u001a";
         int var5 = "-S\u000f\u0013=n\u00048C\u0010\u001a".length();
         char var2 = 6;
         int var1 = -1;

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

            var2 = var3.charAt(var1);
         }
      }

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

         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 -> 126;
               case 1 -> 10;
               case 2 -> 92;
               case 3 -> 95;
               case 4 -> 114;
               case 5 -> 41;
               default -> 92;
            });
         }

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