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

import com.l7tech.external.assertions.gatewaygraphql.server.data.EntityMutationStatus;
import com.l7tech.external.assertions.gatewaygraphql.server.input.EntityInput;
import com.l7tech.external.assertions.gatewaygraphql.server.resolver.finder.EntityAwareFinder;
import com.l7tech.external.assertions.gatewaygraphql.server.util.FolderHelper;
import com.l7tech.objectmodel.Entity;
import com.l7tech.server.security.rbac.ProtectedEntityTracker;
import java.util.LinkedList;
import java.util.List;
import java.util.function.Consumer;
import lombok.Generated;

public class ResolverExecutionContext {
   private String a;
   private FolderHelper b;
   private QueryOptionsSupplier c;
   private ResolverBundleProperties d;
   private ProtectedEntityTracker e;
   private EntityAwareFinder<? extends Entity, ? extends EntityInput> f;
   private Consumer<EntityInput> g;
   private final List<LazyEntityMutationStatus> h = new LinkedList<>();

   public static ResolverExecutionContext.Builder getBuilder() {
      return new ResolverExecutionContext.Builder();
   }

   private ResolverExecutionContext() {
      this.d = new ResolverBundleProperties();
   }

   public void clearResolverSpecificState() {
      this.setFinder(null);
      this.setInputNormalizer(null);
   }

   public void addLazyMutation(EntityInput var1, EntityMutationStatus var2, String var3) {
      this.h.add(new LazyEntityMutationStatus(var1, var2, var3));
   }

   @Generated
   public String getEncryptionPassphrase() {
      return this.a;
   }

   @Generated
   public FolderHelper getFolderHelper() {
      return this.b;
   }

   @Generated
   public QueryOptionsSupplier getQueryOptionsSupplier() {
      return this.c;
   }

   @Generated
   public ResolverBundleProperties getBundleProperties() {
      return this.d;
   }

   @Generated
   public ProtectedEntityTracker getProtectedEntityTracker() {
      return this.e;
   }

   @Generated
   public EntityAwareFinder<? extends Entity, ? extends EntityInput> getFinder() {
      return this.f;
   }

   @Generated
   public Consumer<EntityInput> getInputNormalizer() {
      return this.g;
   }

   @Generated
   public List<LazyEntityMutationStatus> getLazyMutations() {
      return this.h;
   }

   @Generated
   public void setFinder(EntityAwareFinder<? extends Entity, ? extends EntityInput> var1) {
      this.f = var1;
   }

   @Generated
   public void setInputNormalizer(Consumer<EntityInput> var1) {
      this.g = var1;
   }

   public static class Builder {
      private final ResolverExecutionContext a = new ResolverExecutionContext();

      private Builder() {
      }

      public ResolverExecutionContext.Builder encryptionPassphrase(String var1) {
         this.a.a = var1;
         return this;
      }

      public ResolverExecutionContext.Builder folderHelper(FolderHelper var1) {
         this.a.b = var1;
         return this;
      }

      public ResolverExecutionContext.Builder queryOptionsSupplier(QueryOptionsSupplier var1) {
         this.a.c = var1;
         return this;
      }

      public ResolverExecutionContext.Builder bundleProperties(ResolverBundleProperties var1) {
         this.a.d = var1;
         return this;
      }

      public ResolverExecutionContext.Builder protectedEntityTracker(ProtectedEntityTracker var1) {
         this.a.e = var1;
         return this;
      }

      public ResolverExecutionContext build() {
         return this.a;
      }
   }
}
