package com.airlock.iam.login.rest.application.configuration;

import com.airlock.iam.common.api.application.configuration.user.UserGroupConditionConfig;
import com.airlock.iam.core.application.configuration.contextdata.ContextDataItemNameConfig;
import com.airlock.iam.plugin.api.annotation.config.Plugin;
import com.airlock.iam.plugin.api.annotation.property.PluginListProperty;
import com.airlock.iam.plugin.api.annotation.property.PluginProperty;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.util.List;

@Plugin(description = "Defines user group-dependent settings of the user data self information page.")
public final class UserSelfInformationGroupConfig {
   @PluginProperty(description = "The group condition selecting this user data information settings for a user.", optional = false)
   private UserGroupConditionConfig groupCondition;
   public static final String GROUP_CONDITION_CONFIG_NAME = "groupCondition";
   @PluginListProperty(
      description = "List of names of context data fields to be returned for reading if the group condition matches. This must be a subset of the context data fields configured in the user persister.",
      optional = false
   )
   private List<ContextDataItemNameConfig> contextDataItemNames;
   public static final String CONTEXT_DATA_ITEM_NAMES_CONFIG_NAME = "contextDataItemNames";

   public UserGroupConditionConfig getGroupCondition() {
      return this.groupCondition;
   }

   public List<ContextDataItemNameConfig> getContextDataItemNames() {
      return this.contextDataItemNames;
   }

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

   @SuppressFBWarnings(justification = "generated code")
   public UserSelfInformationGroupConfig(UserGroupConditionConfig groupCondition, List<ContextDataItemNameConfig> contextDataItemNames) {
      this.groupCondition = groupCondition;
      this.contextDataItemNames = contextDataItemNames;
   }

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

   @SuppressFBWarnings(justification = "generated code")
   public static class UserSelfInformationGroupConfigBuilder {
      @SuppressFBWarnings(justification = "generated code")
      private UserGroupConditionConfig groupCondition;
      @SuppressFBWarnings(justification = "generated code")
      private List<ContextDataItemNameConfig> contextDataItemNames;

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

      @SuppressFBWarnings(justification = "generated code")
      public UserSelfInformationGroupConfig.UserSelfInformationGroupConfigBuilder groupCondition(UserGroupConditionConfig groupCondition) {
         this.groupCondition = groupCondition;
         return this;
      }

      @SuppressFBWarnings(justification = "generated code")
      public UserSelfInformationGroupConfig.UserSelfInformationGroupConfigBuilder contextDataItemNames(List<ContextDataItemNameConfig> contextDataItemNames) {
         this.contextDataItemNames = contextDataItemNames;
         return this;
      }

      @SuppressFBWarnings(justification = "generated code")
      public UserSelfInformationGroupConfig build() {
         return new UserSelfInformationGroupConfig(this.groupCondition, this.contextDataItemNames);
      }

      @SuppressFBWarnings(justification = "generated code")
      @Override
      public String toString() {
         return "UserSelfInformationGroupConfig.UserSelfInformationGroupConfigBuilder(groupCondition="
            + this.groupCondition
            + ", contextDataItemNames="
            + this.contextDataItemNames
            + ")";
      }
   }
}
