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

import com.airlock.iam.flow.api.application.configuration.redflag.RedFlagConfig;
import com.airlock.iam.flow.api.domain.model.redflag.RedFlag;
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.StringProperty;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;

@Plugin(
   description = "Red Flag for account linking required. Typically raised by an 'OAuth 2.0 SSO Step' and handled by a 'Missing Account Link Step'.",
   displayName = "Account Linking Required Red Flag"
)
@PluginLicenseRestriction(moduleAffiliation = "OAuthAccountLinking")
public final class AccountLinkingRequiredRedFlagConfig implements RedFlagConfig {
   public static final String ACCOUNT_LINKING_REQUIRED_RED_FLAG = "Account Linking Required Red Flag";
   public static final String OAUTH2_ACCOUNT_LINKING_REQUIRED_RED_FLAG_NAME = "OAUTH2_ACCOUNT_LINKING_REQUIRED";
   @StringProperty(description = "The name of the red flag.", defaultValue = "OAUTH2_ACCOUNT_LINKING_REQUIRED", optional = true)
   private String name;

   @Override
   public RedFlag toRedFlag() {
      return new RedFlag(this.getName());
   }

   @Override
   public String getName() {
      return this.name;
   }

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

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

   @SuppressFBWarnings(justification = "generated code")
   public AccountLinkingRequiredRedFlagConfig(String name) {
      this.name = name;
   }

   @SuppressFBWarnings(justification = "generated code")
   public static class AccountLinkingRequiredRedFlagConfigBuilder {
      @SuppressFBWarnings(justification = "generated code")
      private String name;

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

      @SuppressFBWarnings(justification = "generated code")
      public AccountLinkingRequiredRedFlagConfig.AccountLinkingRequiredRedFlagConfigBuilder name(String name) {
         this.name = name;
         return this;
      }

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

      @SuppressFBWarnings(justification = "generated code")
      @Override
      public String toString() {
         return "AccountLinkingRequiredRedFlagConfig.AccountLinkingRequiredRedFlagConfigBuilder(name=" + this.name + ")";
      }
   }
}
