package com.airlock.iam.servicecontainer.app.application.configuration;

import com.airlock.iam.plugin.api.annotation.config.Plugin;
import com.airlock.iam.plugin.api.annotation.property.BooleanProperty;
import com.airlock.iam.plugin.api.annotation.property.PluginProperty;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;

@Plugin(description = "Configuration used for each service.")
public final class ServiceConfig {
   @PluginProperty(description = "The service plugin to use.", optional = false)
   private Service service;
   @BooleanProperty(description = "If enabled, the service is automatically started when the server is started.", optional = true, defaultValue = "true")
   private boolean autoStart;

   public boolean isAutoStart() {
      return this.autoStart;
   }

   public Service getService() {
      return this.service;
   }

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

   @SuppressFBWarnings(justification = "generated code")
   public ServiceConfig(Service service, boolean autoStart) {
      this.service = service;
      this.autoStart = autoStart;
   }

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

   @SuppressFBWarnings(justification = "generated code")
   public static class ServiceConfigBuilder {
      @SuppressFBWarnings(justification = "generated code")
      private Service service;
      @SuppressFBWarnings(justification = "generated code")
      private boolean autoStart;

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

      @SuppressFBWarnings(justification = "generated code")
      public ServiceConfig.ServiceConfigBuilder service(Service service) {
         this.service = service;
         return this;
      }

      @SuppressFBWarnings(justification = "generated code")
      public ServiceConfig.ServiceConfigBuilder autoStart(boolean autoStart) {
         this.autoStart = autoStart;
         return this;
      }

      @SuppressFBWarnings(justification = "generated code")
      public ServiceConfig build() {
         return new ServiceConfig(this.service, this.autoStart);
      }

      @SuppressFBWarnings(justification = "generated code")
      @Override
      public String toString() {
         return "ServiceConfig.ServiceConfigBuilder(service=" + this.service + ", autoStart=" + this.autoStart + ")";
      }
   }
}
