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

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 = "<p>Unique identifier of an OAuth 2.0 / OpenID Connect Authorization Server.</p>\n<p>This identifier is used in all 'v3'-URLs of this AS.</p>",
   displayName = "OAuth 2.0 Authorization Server Identifier"
)
@PluginLicenseRestriction(moduleAffiliation = "OAuthServer")
public final class OAuth2ASIdentifierConfig {
   @StringProperty(
      description = "<p>The unique identifier of this AS. This identifier is used in the endpoint URLs.</p>\n<p>When changed, all persisted clients have to re-register because their association with this AS is stored\nin the database.</p>\n<p>Note that the issuer ID also contains this identifier.</p>",
      optional = false,
      validationRegex = "[a-zA-Z0-9-._]+",
      minLength = 1,
      maxLength = 50
   )
   private String identifier;
   public static final String IDENTIFIER_PROPERTY = "identifier";

   public String getIdentifier() {
      return this.identifier;
   }

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

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

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

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

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

      @SuppressFBWarnings(justification = "generated code")
      public OAuth2ASIdentifierConfig.OAuth2ASIdentifierConfigBuilder identifier(String identifier) {
         this.identifier = identifier;
         return this;
      }

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

      @SuppressFBWarnings(justification = "generated code")
      @Override
      public String toString() {
         return "OAuth2ASIdentifierConfig.OAuth2ASIdentifierConfigBuilder(identifier=" + this.identifier + ")";
      }
   }
}
