package com.airlock.iam.flow.api.application.configuration.step;

import com.airlock.iam.flow.api.domain.model.step.StepId;
import com.airlock.iam.plugin.api.annotation.config.Plugin;
import com.airlock.iam.plugin.api.annotation.property.StringProperty;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;

@Plugin(description = "Identifier for a flow step.", displayName = "Step ID")
public final class StepIdConfig {
   @StringProperty(
      description = "The ID of the flow step. It must be unique within a flow.",
      optional = false,
      displayName = "ID",
      maxLength = 30,
      validationRegex = "[a-z0-9_-]+"
   )
   private String id;
   public static final String ID_FIELD = "id";
   public static final String ID_DISPLAY_NAME = "ID";

   public StepId getId() {
      return new StepId(this.id);
   }

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

   @SuppressFBWarnings(justification = "generated code")
   public StepIdConfig(String id) {
      this.id = id;
   }

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

   @SuppressFBWarnings(justification = "generated code")
   public static class StepIdConfigBuilder {
      @SuppressFBWarnings(justification = "generated code")
      private String id;

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

      @SuppressFBWarnings(justification = "generated code")
      public StepIdConfig.StepIdConfigBuilder id(String id) {
         this.id = id;
         return this;
      }

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

      @SuppressFBWarnings(justification = "generated code")
      @Override
      public String toString() {
         return "StepIdConfig.StepIdConfigBuilder(id=" + this.id + ")";
      }
   }
}
