package com.airlock.iam.admin.application.configuration.realm;

import com.airlock.iam.core.application.configuration.contextdata.StringContextDataItemNameConfig;
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.PluginProperty;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;

@Plugin(displayName = "Realm Administration", description = "Settings for realm administration.")
@PluginLicenseRestriction(moduleAffiliation = "RealmAdministration")
public class RealmAdministrationConfig {
   private static final String DATABASE_SCHEMA_SUGGESTION = "<p>When using the default database schema the field \"realm\" is intended for this purpose.</p>";
   @PluginProperty(
      description = "The name of the context data field where the administrator's realm is stored. In the standard IAM database schema the field \"realm\" is reserved for this purpose. In order to assign a realm to an administrator, add a \"String User Profile Item\" for this context data field to the \"Rows On Admin Detail Page\" in the Administrators Management\".<p>Note that this context data item must also be configured in the corresponding admin persister.</p><p>When using the default database schema the field \"realm\" is intended for this purpose.</p>",
      optional = false
   )
   private StringContextDataItemNameConfig adminRealmContextDataName;
   @PluginProperty(
      description = "The name of the context data field where the user's realm is stored. In the standard IAM database schema the field \"realm\" is reserved for this purpose. Users inherit the realm from the administrator who created them. Therefore, it is recommended to make this context data item readonly on users or to not show it at all.<p>Note that this context data item must also be configured in the corresponding user persister.</p><p>When using the default database schema the field \"realm\" is intended for this purpose.</p>",
      optional = false
   )
   private StringContextDataItemNameConfig userRealmContextDataName;

   public StringContextDataItemNameConfig getAdminRealmContextDataName() {
      return this.adminRealmContextDataName;
   }

   public StringContextDataItemNameConfig getUserRealmContextDataName() {
      return this.userRealmContextDataName;
   }

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

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

   @SuppressFBWarnings(justification = "generated code")
   public RealmAdministrationConfig(StringContextDataItemNameConfig adminRealmContextDataName, StringContextDataItemNameConfig userRealmContextDataName) {
      this.adminRealmContextDataName = adminRealmContextDataName;
      this.userRealmContextDataName = userRealmContextDataName;
   }

   @SuppressFBWarnings(justification = "generated code")
   public static class RealmAdministrationConfigBuilder {
      @SuppressFBWarnings(justification = "generated code")
      private StringContextDataItemNameConfig adminRealmContextDataName;
      @SuppressFBWarnings(justification = "generated code")
      private StringContextDataItemNameConfig userRealmContextDataName;

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

      @SuppressFBWarnings(justification = "generated code")
      public RealmAdministrationConfig.RealmAdministrationConfigBuilder adminRealmContextDataName(StringContextDataItemNameConfig adminRealmContextDataName) {
         this.adminRealmContextDataName = adminRealmContextDataName;
         return this;
      }

      @SuppressFBWarnings(justification = "generated code")
      public RealmAdministrationConfig.RealmAdministrationConfigBuilder userRealmContextDataName(StringContextDataItemNameConfig userRealmContextDataName) {
         this.userRealmContextDataName = userRealmContextDataName;
         return this;
      }

      @SuppressFBWarnings(justification = "generated code")
      public RealmAdministrationConfig build() {
         return new RealmAdministrationConfig(this.adminRealmContextDataName, this.userRealmContextDataName);
      }

      @SuppressFBWarnings(justification = "generated code")
      @Override
      public String toString() {
         return "RealmAdministrationConfig.RealmAdministrationConfigBuilder(adminRealmContextDataName="
            + this.adminRealmContextDataName
            + ", userRealmContextDataName="
            + this.userRealmContextDataName
            + ")";
      }
   }
}
