package com.l7tech.server.trace;

import com.l7tech.gateway.common.service.PublishedService;
import com.l7tech.message.Message;
import com.l7tech.policy.assertion.AssertionStatus;
import com.l7tech.policy.variable.NoSuchVariableException;
import com.l7tech.server.message.HasOriginalContext;
import com.l7tech.server.message.PolicyEnforcementContext;
import com.l7tech.server.message.PolicyEnforcementContextFactory;
import com.l7tech.server.message.PolicyEnforcementContextWrapper;
import com.l7tech.server.message.metrics.LatencyMetrics;
import com.l7tech.server.policy.assertion.ServerAssertion;
import java.util.logging.Level;

public class TracePolicyEnforcementContext extends PolicyEnforcementContextWrapper implements HasOriginalContext {
   private final PolicyEnforcementContext b;
   private ServerAssertion c;
   private AssertionStatus d;
   private Object e;
   private LatencyMetrics f;
   private static final String h;

   public TracePolicyEnforcementContext(PolicyEnforcementContext var1) {
      super(PolicyEnforcementContextFactory.createUnregisteredPolicyEnforcementContext(null, null, true));
      this.b = var1;
      PublishedService var2 = new PublishedService();
      var2.setName(h);
      var2.setSoap(false);
      this.setService(var2);
   }

   @Override
   public Message getOriginalRequest() {
      return this.b.getRequest();
   }

   @Override
   public Message getOriginalResponse() {
      return this.b.getResponse();
   }

   @Override
   public Object getOriginalContextVariable(String var1) throws NoSuchVariableException {
      return this.b.getVariable(var1);
   }

   @Override
   public PolicyEnforcementContext getOriginalContext() {
      return this.b;
   }

   @Override
   public void setAuditLevel(Level var1) {
      this.b.setAuditLevel(var1);
   }

   @Override
   public Level getAuditLevel() {
      return this.b.getAuditLevel();
   }

   @Override
   public boolean isAuditSaveRequest() {
      return this.b.isAuditSaveRequest();
   }

   @Override
   public void setAuditSaveRequest(boolean var1) {
      this.b.setAuditSaveRequest(var1);
   }

   @Override
   public boolean isAuditSaveResponse() {
      return this.b.isAuditSaveResponse();
   }

   @Override
   public void setAuditSaveResponse(boolean var1) {
      this.b.setAuditSaveResponse(var1);
   }

   public boolean isFinalInvocation() {
      return this.c != null && this.c.getAssertion() != null && this.b.getAssertionOrdinalPath().isEmpty() && this.c.getAssertion().getParent() == null;
   }

   public ServerAssertion getTracedAssertion() {
      return this.c;
   }

   public void setTracedAssertion(ServerAssertion var1) {
      this.c = var1;
   }

   public AssertionStatus getTracedStatus() {
      return this.d;
   }

   public void setTracedStatus(AssertionStatus var1) {
      this.d = var1;
   }

   public Object getTraceOut() {
      return this.e;
   }

   public void setTraceOut(Object var1) {
      this.e = var1;
   }

   public LatencyMetrics getTracedAssertionMetrics() {
      return this.f;
   }

   public void setTracedAssertionMetrics(LatencyMetrics var1) {
      this.f = var1;
   }

   static {
      String var10002 = b(29, c("40aN1{U\u000e\u0015/N&hX\nY\u007fU8`X\u0016Y\u007fI1|_\u0000T|_&\u007fR\f\u001cR"));
      byte var10001 = -1;
      h = var10002;
   }

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

      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 -> 114;
            case 1 -> 100;
            case 2 -> 18;
            case 3 -> 39;
            case 4 -> 73;
            case 5 -> 20;
            default -> 38;
         });
      }

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