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

import com.airlock.iam.flow.shared.application.configuration.valueprovider.RoleProviderConfig;
import com.airlock.iam.plugin.api.annotation.config.Plugin;
import com.airlock.iam.plugin.api.annotation.property.PluginProperty;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;

@Plugin(
   description = "Roles from the Role Provider will be added to the Airlock Gateway session. The Timeout Provider can be used to set custom session idle timeouts and lifetimes. The timeouts are applied to all provided roles. If no timeouts are provided and the role doesn't have timeouts, the Airlock Gateway defaults are applied."
)
public final class AirlockGatewayRolesConfig implements WafCredentialProviderConfig {
   @PluginProperty(description = "All roles which are provided will be added to the Airlock Gateway session.", optional = false)
   private RoleProviderConfig roleProvider;
   @PluginProperty(
      description = "The Timeout Provider will be applied to all provided roles. The roles idle timeouts and lifetimes are preserved, when neither is overwritten by a timeout provider.",
      optional = true
   )
   private TimeoutProviderConfig timeoutProvider;

   public RoleProviderConfig getRoleProvider() {
      return this.roleProvider;
   }

   public TimeoutProviderConfig getTimeoutProvider() {
      return this.timeoutProvider;
   }

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

   @SuppressFBWarnings(justification = "generated code")
   public AirlockGatewayRolesConfig(RoleProviderConfig roleProvider, TimeoutProviderConfig timeoutProvider) {
      this.roleProvider = roleProvider;
      this.timeoutProvider = timeoutProvider;
   }

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

   @SuppressFBWarnings(justification = "generated code")
   public static class AirlockGatewayRolesConfigBuilder {
      @SuppressFBWarnings(justification = "generated code")
      private RoleProviderConfig roleProvider;
      @SuppressFBWarnings(justification = "generated code")
      private TimeoutProviderConfig timeoutProvider;

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

      @SuppressFBWarnings(justification = "generated code")
      public AirlockGatewayRolesConfig.AirlockGatewayRolesConfigBuilder roleProvider(RoleProviderConfig roleProvider) {
         this.roleProvider = roleProvider;
         return this;
      }

      @SuppressFBWarnings(justification = "generated code")
      public AirlockGatewayRolesConfig.AirlockGatewayRolesConfigBuilder timeoutProvider(TimeoutProviderConfig timeoutProvider) {
         this.timeoutProvider = timeoutProvider;
         return this;
      }

      @SuppressFBWarnings(justification = "generated code")
      public AirlockGatewayRolesConfig build() {
         return new AirlockGatewayRolesConfig(this.roleProvider, this.timeoutProvider);
      }

      @SuppressFBWarnings(justification = "generated code")
      @Override
      public String toString() {
         return "AirlockGatewayRolesConfig.AirlockGatewayRolesConfigBuilder(roleProvider="
            + this.roleProvider
            + ", timeoutProvider="
            + this.timeoutProvider
            + ")";
      }
   }
}
