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

import com.airlock.iam.login.api.application.configuration.oauth2.accountregistration.AccountRegistrationUsernameProviderConfig;
import com.airlock.iam.login.api.domain.model.oauth2.accountregistration.AccountRegistrationUsernameProvider;
import com.airlock.iam.oauth2.domain.model.accountregistration.ContextDataUsernameProvider;
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 = "Uses a context data value as username.", displayName = "Context Data Username")
@PluginLicenseRestriction(moduleAffiliation = "OAuthSocialRegistration")
public final class ContextDataUsernameConfig implements AccountRegistrationUsernameProviderConfig {
   @StringProperty(
      description = "Context Data to use as username. The value of this context data must be present, else the user creation will fail. <p>To be able obtain the context data value, it is required to add an 'OAuth 2.0 Remote Context Data Resource' with a 'Local Context Data Key' equal to this value to the resource mappings.</p>",
      optional = false,
      exampleValues = "email, mtan_number"
   )
   private String contextData;

   @Override
   public AccountRegistrationUsernameProvider logic() {
      return new ContextDataUsernameProvider(this.contextData);
   }

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

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

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

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

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

      @SuppressFBWarnings(justification = "generated code")
      public ContextDataUsernameConfig.ContextDataUsernameConfigBuilder contextData(String contextData) {
         this.contextData = contextData;
         return this;
      }

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

      @SuppressFBWarnings(justification = "generated code")
      @Override
      public String toString() {
         return "ContextDataUsernameConfig.ContextDataUsernameConfigBuilder(contextData=" + this.contextData + ")";
      }
   }
}
