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

import com.airlock.iam.common.api.application.configuration.valueprovider.StringValueProviderConfig;
import com.airlock.iam.plugin.api.annotation.config.Plugin;
import com.airlock.iam.plugin.api.annotation.property.PluginListProperty;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.util.List;

@Plugin(description = "Provides recipient phone numbers of the configured value providers.", displayName = "Phone Numbers from String Value Providers")
public final class StringValuePhoneNumbersProviderConfig implements PhoneNumbersProviderConfig {
   @PluginListProperty(
      description = "<p>String Value Providers which provide the phone numbers.</p>\nThe phone numbers are supplied by the value providers without being verified as valid phone numbers.\nOther plugins, e.g. SMS Event Subscriber, may check if the values are valid before sending an SMS.\nAdditional transformation may be required.\n<p>Some value providers may not work depending on where the plugin is configured, e.g. flow-specific providers only work in flows.</p>",
      minElements = 1,
      optional = false
   )
   private List<StringValueProviderConfig> recipientProviders;

   public List<StringValueProviderConfig> getRecipientProviders() {
      return this.recipientProviders;
   }

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

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

   @SuppressFBWarnings(justification = "generated code")
   public StringValuePhoneNumbersProviderConfig(List<StringValueProviderConfig> recipientProviders) {
      this.recipientProviders = recipientProviders;
   }

   @SuppressFBWarnings(justification = "generated code")
   public static class StringValuePhoneNumbersProviderConfigBuilder {
      @SuppressFBWarnings(justification = "generated code")
      private List<StringValueProviderConfig> recipientProviders;

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

      @SuppressFBWarnings(justification = "generated code")
      public StringValuePhoneNumbersProviderConfig.StringValuePhoneNumbersProviderConfigBuilder recipientProviders(
         List<StringValueProviderConfig> recipientProviders
      ) {
         this.recipientProviders = recipientProviders;
         return this;
      }

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

      @SuppressFBWarnings(justification = "generated code")
      @Override
      public String toString() {
         return "StringValuePhoneNumbersProviderConfig.StringValuePhoneNumbersProviderConfigBuilder(recipientProviders=" + this.recipientProviders + ")";
      }
   }
}
