package com.l7tech.gateway.api;

import com.l7tech.gateway.api.impl.AccessorSupport;
import com.l7tech.gateway.api.impl.ElementExtendableAccessibleObject;
import com.l7tech.gateway.api.impl.ManagedObjectReference;
import com.l7tech.gateway.api.impl.PropertiesMapType;
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.Date;
import java.util.Map;

@XmlRootElement(name = "ScheduledTask")
@XmlType(
   name = "ScheduledTaskType",
   propOrder = {
         "name",
         "policyReference",
         "useOneNode",
         "jobType",
         "jobStatus",
         "executionDate",
         "cronExpression",
         "executeOnCreate",
         "properties",
         "extension",
         "extensions"
   }
)
@AccessorSupport.AccessibleResource(name = "scheduledTasks")
public class ScheduledTaskMO extends ElementExtendableAccessibleObject {
   private String h;
   private ManagedObjectReference i;
   private Boolean j = false;
   private ScheduledTaskMO.ScheduledTaskJobType k;
   private ScheduledTaskMO.ScheduledTaskJobStatus l;
   private Date m;
   private Boolean n = false;
   private String 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 = "PolicyReference", required = true)
   public ManagedObjectReference getPolicyReference() {
      return this.i;
   }

   public void setPolicyReference(ManagedObjectReference var1) {
      this.i = var1;
   }

   @XmlElement(name = "OneNode", required = true)
   public Boolean isUseOneNode() {
      return this.j;
   }

   public void setUseOneNode(Boolean var1) {
      this.j = var1;
   }

   @XmlElement(name = "JobType", required = true)
   public ScheduledTaskMO.ScheduledTaskJobType getJobType() {
      return this.k;
   }

   public void setJobType(ScheduledTaskMO.ScheduledTaskJobType var1) {
      this.k = var1;
   }

   @XmlElement(name = "JobStatus", required = true)
   public ScheduledTaskMO.ScheduledTaskJobStatus getJobStatus() {
      return this.l;
   }

   public void setJobStatus(ScheduledTaskMO.ScheduledTaskJobStatus var1) {
      this.l = var1;
   }

   @XmlElement(name = "ExecutionDate")
   public Date getExecutionDate() {
      return this.m;
   }

   public void setExecutionDate(Date var1) {
      this.m = var1;
   }

   @XmlElement(name = "ExecuteOnCreate")
   public Boolean isExecuteOnCreate() {
      return this.n;
   }

   public void setExecuteOnCreate(Boolean var1) {
      this.n = var1;
   }

   @XmlElement(name = "CronExpression")
   public String getCronExpression() {
      return this.o;
   }

   public void setCronExpression(String 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;
   }

   ScheduledTaskMO() {
   }

   @XmlEnum(String.class)
   @XmlType(name = "ScheduledTaskJobStatusType")
   public enum ScheduledTaskJobStatus {
      @XmlEnumValue("Scheduled")
      SCHEDULED,
      @XmlEnumValue("Completed")
      COMPLETED,
      @XmlEnumValue("Disabled")
      DISABLED;

      // $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[3];
         int var4 = 0;
         String var3 = "bTDrZ7=b\tu^_v\\.4cY\teRZcT>,cY";
         int var5 = "bTDrZ7=b\tu^_v\\.4cY\teRZcT>,cY".length();
         char var2 = '\b';
         int var1 = -1;

         while (true) {
            String var10002 = a(a(var3.substring(++var1, var1 + var2)));
            byte var10001 = -1;
            var0[var4++] = var10002;
            if ((var1 += var2) >= var5) {
               SCHEDULED = new ScheduledTaskMO.ScheduledTaskJobStatus();
               COMPLETED = new ScheduledTaskMO.ScheduledTaskJobStatus();
               DISABLED = new ScheduledTaskMO.ScheduledTaskJobStatus();
               return;
            }

            var2 = var3.charAt(var1);
         }
      }

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

         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 -> 38;
               case 1 -> 29;
               case 2 -> 23;
               case 3 -> 51;
               case 4 -> 24;
               case 5 -> 123;
               default -> 120;
            });
         }

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

   @XmlEnum(String.class)
   @XmlType(name = "ScheduledTaskJobTypeType")
   public enum ScheduledTaskJobType {
      @XmlEnumValue("One time")
      ONE_TIME,
      @XmlEnumValue("Recurring")
      RECURRING;

      // $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 = "\u000b##lt[s\u0017!\b\u0016(%fr@w\u001c";
         int var5 = "\u000b##lt[s\u0017!\b\u0016(%fr@w\u001c".length();
         char var2 = '\t';
         int var1 = -1;

         while (true) {
            String var10002 = a(a(var3.substring(++var1, var1 + var2)));
            byte var10001 = -1;
            var0[var4++] = var10002;
            if ((var1 += var2) >= var5) {
               ONE_TIME = new ScheduledTaskMO.ScheduledTaskJobType();
               RECURRING = new ScheduledTaskMO.ScheduledTaskJobType();
               return;
            }

            var2 = var3.charAt(var1);
         }
      }

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

         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 -> 89;
               case 1 -> 102;
               case 2 -> 96;
               case 3 -> 57;
               case 4 -> 38;
               case 5 -> 9;
               default -> 58;
            });
         }

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