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

import com.airlock.iam.health.api.application.configuration.HealthCheckConfig;
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(
   displayName = "Readiness Health Check Endpoint",
   description = "<p>Configuration of the Readiness endpoint.</p>\n<p>The readiness endpoint can be used in Airlock Gateway or Kubernetes to determine whether IAM is ready\nto handle incoming requests.</p>\n<p>The endpoint is available under: <tt>/health/ready</tt></p>"
)
public class ModuleReadinessConfig {
   @PluginListProperty(
      description = "List of health checks to perform when the readiness endpoint is called.\nA check with the name \"configActivation\" is always included and cannot be disabled.\nIt results in the status DOWN if the initial config activation fails.",
      optional = true
   )
   private List<HealthCheckConfig> checks;

   public List<HealthCheckConfig> getChecks() {
      return this.checks;
   }

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

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

   @SuppressFBWarnings(justification = "generated code")
   public ModuleReadinessConfig(List<HealthCheckConfig> checks) {
      this.checks = checks;
   }

   @SuppressFBWarnings(justification = "generated code")
   public static class ModuleReadinessConfigBuilder {
      @SuppressFBWarnings(justification = "generated code")
      private List<HealthCheckConfig> checks;

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

      @SuppressFBWarnings(justification = "generated code")
      public ModuleReadinessConfig.ModuleReadinessConfigBuilder checks(List<HealthCheckConfig> checks) {
         this.checks = checks;
         return this;
      }

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

      @SuppressFBWarnings(justification = "generated code")
      @Override
      public String toString() {
         return "ModuleReadinessConfig.ModuleReadinessConfigBuilder(checks=" + this.checks + ")";
      }
   }
}
