package com.l7tech.policy;

import com.l7tech.policy.assertion.Assertion;
import com.l7tech.policy.assertion.composite.CompositeAssertion;
import com.l7tech.util.DeserializeSafe;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@DeserializeSafe
public class PolicyValidatorResult implements Serializable {
   private List<PolicyValidatorResult.Error> errors = new ArrayList<>();
   private List<PolicyValidatorResult.Warning> warnings = new ArrayList<>();
   private Map<Collection<Integer>, List<PolicyValidatorResult.Message>> assertionMessages = new HashMap<>();
   static final long serialVersionUID = 8842658383355349197L;

   public int getErrorCount() {
      return this.errors.size();
   }

   public int getWarningCount() {
      return this.warnings.size();
   }

   public List<PolicyValidatorResult.Error> getErrors() {
      return Collections.unmodifiableList(this.errors);
   }

   public List<PolicyValidatorResult.Warning> getWarnings() {
      return Collections.unmodifiableList(this.warnings);
   }

   public List<PolicyValidatorResult.Message> getMessages() {
      ArrayList var1 = new ArrayList();
      var1.addAll(this.getErrors());
      var1.addAll(this.getWarnings());
      return var1;
   }

   public void addError(PolicyValidatorResult.Error var1) {
      this.errors.add(var1);
      List var2 = this.assertionMessages.get(var1.getAssertionIndexPath());
      if (var2 == null) {
         var2 = new ArrayList();
         this.assertionMessages.put(var1.getAssertionIndexPath(), var2);
      }

      var2.add(var1);
   }

   public void addWarning(PolicyValidatorResult.Warning var1) {
      this.warnings.add(var1);
      List var2 = this.assertionMessages.get(var1.getAssertionIndexPath());
      if (var2 == null) {
         var2 = new ArrayList();
         this.assertionMessages.put(var1.getAssertionIndexPath(), var2);
      }

      var2.add(var1);
   }

   public List<PolicyValidatorResult.Message> messages(Assertion var1) {
      return this.messages(buildIndexPath(var1));
   }

   public List<PolicyValidatorResult.Message> messages(int var1) {
      List var2 = null;

      for (List var4 : this.assertionMessages.values()) {
         if (!var4.isEmpty()) {
            PolicyValidatorResult.Message var5 = (PolicyValidatorResult.Message)var4.get(0);
            if (var5.getAssertionOrdinal() == var1) {
               var2 = var4;
               break;
            }
         }
      }

      return var2 != null ? var2 : Collections.emptyList();
   }

   public List<PolicyValidatorResult.Message> messages(List<Integer> var1) {
      List var2 = this.assertionMessages.get(var1);
      return var2 != null ? var2 : Collections.emptyList();
   }

   private static List<Integer> buildIndexPath(Assertion var0) {
      ArrayList var1 = new ArrayList();
      Assertion var2 = var0;

      while (var2 != null) {
         CompositeAssertion var3 = var2.getParent();
         if (var3 != null) {
            var1.add(var3.getChildren().indexOf(var2));
         }

         var2 = var3;
      }

      Collections.reverse(var1);
      return var1;
   }

   public static class Error extends PolicyValidatorResult.Message implements Serializable {
      static final long serialVersionUID = 8511121362362008998L;

      public Error(List<Integer> var1, int var2, String var3, Throwable var4) {
         super(var1, var2, var3, var4);
      }

      public Error(Assertion var1, String var2, Throwable var3) {
         super(var1, var2, var3);
      }

      public Error(Assertion var1, String var2, Throwable var3, String var4) {
         super(var1, var2, var3, var4);
      }
   }

   public static class Message implements Serializable {
      private final int ordinal;
      private final List<Integer> assertionIndexPath;
      private final String message;
      private final Throwable throwable;
      private final String remedialActionClassname;
      static final long serialVersionUID = -3560806475275194703L;

      Message(Collection<Integer> var1, int var2, String var3, Throwable var4, String var5) {
         if (var3 == null) {
            throw new IllegalArgumentException();
         }

         this.ordinal = var2;
         this.assertionIndexPath = new ArrayList<>(var1);
         this.message = var3;
         this.throwable = var4;
         this.remedialActionClassname = var5;
      }

      Message(Collection<Integer> var1, int var2, String var3, Throwable var4) {
         this(var1, var2, var3, var4, null);
      }

      Message(Assertion var1, String var2, Throwable var3) {
         this(PolicyValidatorResult.buildIndexPath(var1), var1.getOrdinal(), var2, var3);
      }

      public Message(Assertion var1, String var2, Throwable var3, String var4) {
         this(PolicyValidatorResult.buildIndexPath(var1), var1.getOrdinal(), var2, var3, var4);
      }

      public List<Integer> getAssertionIndexPath() {
         return Collections.unmodifiableList(this.assertionIndexPath);
      }

      public int getAssertionOrdinal() {
         return this.ordinal;
      }

      public String getMessage() {
         return this.message;
      }

      public Throwable getThrowable() {
         return this.throwable;
      }

      public String getRemedialActionClassname() {
         return this.remedialActionClassname;
      }

      @Override
      public boolean equals(Object 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: aload 1
         // 02: if_acmpne 0b
         // 05: bipush 1
         // 06: ireturn
         // 07: invokestatic com/l7tech/policy/PolicyValidatorResult$Message.a (Ljava/lang/IllegalArgumentException;)Ljava/lang/IllegalArgumentException;
         // 0a: athrow
         // 0b: aload 1
         // 0c: ifnull 21
         // 0f: aload 0
         // 10: invokevirtual java/lang/Object.getClass ()Ljava/lang/Class;
         // 13: aload 1
         // 14: invokevirtual java/lang/Object.getClass ()Ljava/lang/Class;
         // 17: if_acmpeq 27
         // 1a: goto 21
         // 1d: invokestatic com/l7tech/policy/PolicyValidatorResult$Message.a (Ljava/lang/IllegalArgumentException;)Ljava/lang/IllegalArgumentException;
         // 20: athrow
         // 21: bipush 0
         // 22: ireturn
         // 23: invokestatic com/l7tech/policy/PolicyValidatorResult$Message.a (Ljava/lang/IllegalArgumentException;)Ljava/lang/IllegalArgumentException;
         // 26: athrow
         // 27: aload 1
         // 28: checkcast com/l7tech/policy/PolicyValidatorResult$Message
         // 2b: astore 2
         // 2c: aload 0
         // 2d: getfield com/l7tech/policy/PolicyValidatorResult$Message.ordinal I
         // 30: aload 2
         // 31: getfield com/l7tech/policy/PolicyValidatorResult$Message.ordinal I
         // 34: if_icmpeq 3d
         // 37: bipush 0
         // 38: ireturn
         // 39: invokestatic com/l7tech/policy/PolicyValidatorResult$Message.a (Ljava/lang/IllegalArgumentException;)Ljava/lang/IllegalArgumentException;
         // 3c: athrow
         // 3d: aload 0
         // 3e: getfield com/l7tech/policy/PolicyValidatorResult$Message.assertionIndexPath Ljava/util/List;
         // 41: aload 2
         // 42: getfield com/l7tech/policy/PolicyValidatorResult$Message.assertionIndexPath Ljava/util/List;
         // 45: invokeinterface java/util/List.equals (Ljava/lang/Object;)Z 2
         // 4a: ifne 53
         // 4d: bipush 0
         // 4e: ireturn
         // 4f: invokestatic com/l7tech/policy/PolicyValidatorResult$Message.a (Ljava/lang/IllegalArgumentException;)Ljava/lang/IllegalArgumentException;
         // 52: athrow
         // 53: aload 0
         // 54: getfield com/l7tech/policy/PolicyValidatorResult$Message.message Ljava/lang/String;
         // 57: ifnull 76
         // 5a: aload 0
         // 5b: getfield com/l7tech/policy/PolicyValidatorResult$Message.message Ljava/lang/String;
         // 5e: aload 2
         // 5f: getfield com/l7tech/policy/PolicyValidatorResult$Message.message Ljava/lang/String;
         // 62: invokevirtual java/lang/String.equals (Ljava/lang/Object;)Z
         // 65: ifne 83
         // 68: goto 6f
         // 6b: invokestatic com/l7tech/policy/PolicyValidatorResult$Message.a (Ljava/lang/IllegalArgumentException;)Ljava/lang/IllegalArgumentException;
         // 6e: athrow
         // 6f: goto 7d
         // 72: invokestatic com/l7tech/policy/PolicyValidatorResult$Message.a (Ljava/lang/IllegalArgumentException;)Ljava/lang/IllegalArgumentException;
         // 75: athrow
         // 76: aload 2
         // 77: getfield com/l7tech/policy/PolicyValidatorResult$Message.message Ljava/lang/String;
         // 7a: ifnull 83
         // 7d: bipush 0
         // 7e: ireturn
         // 7f: invokestatic com/l7tech/policy/PolicyValidatorResult$Message.a (Ljava/lang/IllegalArgumentException;)Ljava/lang/IllegalArgumentException;
         // 82: athrow
         // 83: bipush 1
         // 84: ireturn
         // try (0 -> 5): 5 java/lang/IllegalArgumentException
         // try (7 -> 14): 15 java/lang/IllegalArgumentException
         // try (9 -> 19): 19 java/lang/IllegalArgumentException
         // try (24 -> 31): 31 java/lang/IllegalArgumentException
         // try (33 -> 41): 41 java/lang/IllegalArgumentException
         // try (43 -> 52): 53 java/lang/IllegalArgumentException
         // try (46 -> 56): 56 java/lang/IllegalArgumentException
         // try (58 -> 63): 63 java/lang/IllegalArgumentException
      }

      @Override
      public int hashCode() {
         int var1 = this.ordinal * 17;
         var1 = 31 * var1 + this.assertionIndexPath.hashCode();

         int var10000;
         try {
            var10000 = 31 * var1;
            if (this.message != null) {
               return var10000 + this.message.hashCode();
            }
         } catch (IllegalArgumentException var2) {
            throw a(var2);
         }

         return var10000 + 0;
      }

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

   public static class Warning extends PolicyValidatorResult.Message implements Serializable {
      static final long serialVersionUID = -9009727868685857151L;

      public Warning(List<Integer> var1, int var2, String var3, Throwable var4) {
         super(var1, var2, var3, var4);
      }

      public Warning(Assertion var1, String var2, Throwable var3) {
         super(var1, var2, var3);
      }

      public Warning(Assertion var1, String var2, Throwable var3, String var4) {
         super(var1, var2, var3, var4);
      }
   }
}
