package com.airlock.iam.oauth2.application.configuration.accountlinking;

import com.airlock.iam.flow.api.application.configuration.redflag.RedFlagConfig;
import com.airlock.iam.flow.api.application.configuration.selection.FlowConditionConfig;
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 = "Flow condition which evaluates to true, if the configured red flag is raised.",
   displayName = "Account Linking Required Red Flag Condition"
)
@PluginLicenseRestriction(moduleAffiliation = "OAuthAccountLinking")
public class AccountLinkingRequiredConditionConfig implements FlowConditionConfig {
   public static final String ACCOUNT_LINKING_REQUIRED_CONDITION_NAME = "Account Linking Required Red Flag Condition";
   @PluginProperty(
      description = "While the configured red flag is raised, this condition evaluates to true.",
      defaultValue = AccountLinkingRequiredRedFlagConfig.class,
      optional = true
   )
   private RedFlagConfig redFlag;

   public RedFlagConfig getRedFlag() {
      return this.redFlag;
   }

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

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

   @SuppressFBWarnings(justification = "generated code")
   public AccountLinkingRequiredConditionConfig(RedFlagConfig redFlag) {
      this.redFlag = redFlag;
   }

   @SuppressFBWarnings(justification = "generated code")
   public static class AccountLinkingRequiredConditionConfigBuilder {
      @SuppressFBWarnings(justification = "generated code")
      private RedFlagConfig redFlag;

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

      @SuppressFBWarnings(justification = "generated code")
      public AccountLinkingRequiredConditionConfig.AccountLinkingRequiredConditionConfigBuilder redFlag(RedFlagConfig redFlag) {
         this.redFlag = redFlag;
         return this;
      }

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

      @SuppressFBWarnings(justification = "generated code")
      @Override
      public String toString() {
         return "AccountLinkingRequiredConditionConfig.AccountLinkingRequiredConditionConfigBuilder(redFlag=" + this.redFlag + ")";
      }
   }
}
