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

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.RegexProperty;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.util.regex.Pattern;

@Plugin(
   description = "This plugin checks the OIDC <code>login_hint</code> parameter and provides it as additional attribute <code>usernameHint</code> in the authentication flow response if valid. When using the Loginapp UI, a valid <code>login_hint</code> will be prefilled as the username on the password page.",
   displayName = "OIDC Username Login Hint Flow Settings"
)
@PluginLicenseRestriction(moduleAffiliation = "OAuthServer")
public final class OpenIdConnectUsernameLoginHintFlowConfig implements OpenIdConnectLoginHintFlowConfig {
   @RegexProperty(
      description = "The value of the <code>login_hint</code> parameter (username) is validated against this pattern. If the username matches, it is reflected to the client as additional attribute <code>usernameHint</code> in the flow response. Otherwise, the <code>login_hint</code> is ignored.",
      optional = false
   )
   private Pattern usernamePattern;

   public Pattern getUsernamePattern() {
      return this.usernamePattern;
   }

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

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

   @SuppressFBWarnings(justification = "generated code")
   public OpenIdConnectUsernameLoginHintFlowConfig(Pattern usernamePattern) {
      this.usernamePattern = usernamePattern;
   }

   @SuppressFBWarnings(justification = "generated code")
   public static class OpenIdConnectUsernameLoginHintFlowConfigBuilder {
      @SuppressFBWarnings(justification = "generated code")
      private Pattern usernamePattern;

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

      @SuppressFBWarnings(justification = "generated code")
      public OpenIdConnectUsernameLoginHintFlowConfig.OpenIdConnectUsernameLoginHintFlowConfigBuilder usernamePattern(Pattern usernamePattern) {
         this.usernamePattern = usernamePattern;
         return this;
      }

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

      @SuppressFBWarnings(justification = "generated code")
      @Override
      public String toString() {
         return "OpenIdConnectUsernameLoginHintFlowConfig.OpenIdConnectUsernameLoginHintFlowConfigBuilder(usernamePattern=" + this.usernamePattern + ")";
      }
   }
}
