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

import com.airlock.iam.common.api.application.configuration.valueprovider.StringValueProviderConfig;
import com.airlock.iam.common.api.application.configuration.valueprovider.UserInformationProviderConfig;
import com.airlock.iam.common.api.application.configuration.valueprovider.UsernameToPropagateProviderConfig;
import com.airlock.iam.common.application.configuration.user.UserProfileValueProviderConfig;
import com.airlock.iam.plugin.api.annotation.config.Plugin;
import com.airlock.iam.plugin.api.annotation.property.StringProperty;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.util.Optional;

@Plugin(description = "Defines a static string value to be provided.", displayName = "Static String Value Provider")
public final class StringStaticValueProviderConfig
   implements StringValueProviderConfig,
   UserProfileValueProviderConfig,
   UserInformationProviderConfig,
   UsernameToPropagateProviderConfig {
   @StringProperty(
      description = "<p>The value to be provided.</p>\n<p>If this field is not configured, the provided value will be an empty string.</p>",
      optional = true
   )
   private String value;

   public String getValue() {
      return Optional.ofNullable(this.value).orElse("");
   }

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

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

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

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

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

      @SuppressFBWarnings(justification = "generated code")
      public StringStaticValueProviderConfig.StringStaticValueProviderConfigBuilder value(String value) {
         this.value = value;
         return this;
      }

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

      @SuppressFBWarnings(justification = "generated code")
      @Override
      public String toString() {
         return "StringStaticValueProviderConfig.StringStaticValueProviderConfigBuilder(value=" + this.value + ")";
      }
   }
}
