package com.l7tech.external.assertions.gatewaygraphql.server.data;

import com.fasterxml.jackson.annotation.JsonIncludeProperties;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import com.l7tech.external.assertions.gatewaygraphql.server.util.Util;
import com.l7tech.policy.Policy;
import com.l7tech.policy.PolicyType;
import com.l7tech.policy.PolicyVersion;
import java.util.concurrent.atomic.AtomicReference;
import javax.validation.constraints.NotNull;

public class PolicyDetailsDTO extends EntityDTO<Policy> {
   protected PolicyVersion subEntity;
   private boolean a;

   public PolicyDetailsDTO(Policy var1) {
      super(var1);
   }

   public String getFolderPath() {
      return this.entity.getFolder().getPath();
   }

   public PolicyDTO getPolicy() {
      return new PolicyDTO(this.entity, this.subEntity);
   }

   @NotNull
   public PolicyType getType() {
      return this.entity.getType();
   }

   public String getInternalTag() {
      return this.entity.getInternalTag();
   }

   public String getInternalSubTag() {
      return this.entity.getInternalSubTag();
   }

   public Boolean isSoap() {
      return this.entity.isSoap();
   }

   public boolean isPolicyVersionSelected() {
      return this.a;
   }

   public PolicyVersion getPolicyVersion() {
      return this.subEntity;
   }

   public void setPolicyVersion(PolicyVersion var1) {
      this.setPolicyVersion(var1, true);
   }

   public void setPolicyVersion(PolicyVersion var1, boolean var2) {
      this.subEntity = var1;
      this.a = var2;
   }

   @Override
   protected Object createWrapperObject() {
      return new PolicyDetailsDTO.PolicyDetailsWrapper(this.entity, this.subEntity);
   }

   @JsonIncludeProperties({"name", "type", "internalTag", "internalSubTag", "hashablePolicyXml", "soap", "folderPath", "disabled"})
   @JsonPropertyOrder({"name", "type", "internalTag", "internalSubTag", "hashablePolicyXml", "soap", "folderPath", "disabled"})
   public static final class PolicyDetailsWrapper extends PolicyDetailsDTO {
      private final AtomicReference<String> b = new AtomicReference<>(null);

      public PolicyDetailsWrapper(Policy var1, PolicyVersion var2) {
         super(var1);
         this.subEntity = var2;
      }

      public Boolean isDisabled() {
         return this.entity.isDisabled() ? Boolean.TRUE : null;
      }

      public String getHashablePolicyXml() {
         this.b.compareAndSet(null, Util.hashablePolicyXML(this.subEntity != null ? this.subEntity.getXml() : this.entity.getXml()));
         return this.b.get();
      }

      @Override
      protected Object createWrapperObject() {
         return null;
      }
   }
}
