package com.airlock.iam.oauth2.application.configuration.claims.conditions;

import com.airlock.iam.oauth2.api.application.configuration.claims.ClaimConditionConfig;
import com.airlock.iam.oauth2.api.domain.model.claims.conditions.ClaimCondition;
import com.airlock.iam.oauth2.domain.model.claims.conditions.NotClaimCondition;
import com.airlock.iam.plugin.api.annotation.config.Plugin;
import com.airlock.iam.plugin.api.annotation.license.PluginLicenseRestriction;
import com.airlock.iam.plugin.api.annotation.property.PluginProperty;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;

@Plugin(description = "This condition is fulfilled if its configured condition is not fulfilled.")
@PluginLicenseRestriction(moduleAffiliation = "OAuthServer")
public final class NotClaimConditionConfig implements ClaimConditionConfig {
   @PluginProperty(description = "This condition is fulfilled if the following condition is not fulfilled.", optional = false)
   private ClaimConditionConfig condition;

   @Override
   public ClaimCondition logic() {
      return new NotClaimCondition(this.condition.logic());
   }

   @SuppressFBWarnings(justification = "generated code")
   public static NotClaimConditionConfig.NotClaimConditionConfigBuilder builder() {
      return new NotClaimConditionConfig.NotClaimConditionConfigBuilder();
   }

   @SuppressFBWarnings(justification = "generated code")
   public NotClaimConditionConfig() {
   }

   @SuppressFBWarnings(justification = "generated code")
   public NotClaimConditionConfig(ClaimConditionConfig condition) {
      this.condition = condition;
   }

   @SuppressFBWarnings(justification = "generated code")
   public static class NotClaimConditionConfigBuilder {
      @SuppressFBWarnings(justification = "generated code")
      private ClaimConditionConfig condition;

      @SuppressFBWarnings(justification = "generated code")
      NotClaimConditionConfigBuilder() {
      }

      @SuppressFBWarnings(justification = "generated code")
      public NotClaimConditionConfig.NotClaimConditionConfigBuilder condition(ClaimConditionConfig condition) {
         this.condition = condition;
         return this;
      }

      @SuppressFBWarnings(justification = "generated code")
      public NotClaimConditionConfig build() {
         return new NotClaimConditionConfig(this.condition);
      }

      @SuppressFBWarnings(justification = "generated code")
      @Override
      public String toString() {
         return "NotClaimConditionConfig.NotClaimConditionConfigBuilder(condition=" + this.condition + ")";
      }
   }
}
