// *** WARNING: this file was generated by pulumi-java-gen. ***
// *** Do not edit by hand unless you're certain you know what you are doing! ***

package com.pulumi.aws.autoscaling.inputs;

import com.pulumi.aws.autoscaling.inputs.PolicyPredictiveScalingConfigurationMetricSpecificationArgs;
import com.pulumi.core.Output;
import com.pulumi.core.annotations.Import;
import java.lang.String;
import java.util.Objects;
import java.util.Optional;
import javax.annotation.Nullable;


public final class PolicyPredictiveScalingConfigurationArgs extends com.pulumi.resources.ResourceArgs {

    public static final PolicyPredictiveScalingConfigurationArgs Empty = new PolicyPredictiveScalingConfigurationArgs();

    /**
     * Defines the behavior that should be applied if the forecast capacity approaches or exceeds the maximum capacity of the Auto Scaling group. Valid values are `HonorMaxCapacity` or `IncreaseMaxCapacity`. Default is `HonorMaxCapacity`.
     * 
     */
    @Import(name="maxCapacityBreachBehavior")
    private @Nullable Output<String> maxCapacityBreachBehavior;

    /**
     * @return Defines the behavior that should be applied if the forecast capacity approaches or exceeds the maximum capacity of the Auto Scaling group. Valid values are `HonorMaxCapacity` or `IncreaseMaxCapacity`. Default is `HonorMaxCapacity`.
     * 
     */
    public Optional<Output<String>> maxCapacityBreachBehavior() {
        return Optional.ofNullable(this.maxCapacityBreachBehavior);
    }

    /**
     * Size of the capacity buffer to use when the forecast capacity is close to or exceeds the maximum capacity. Valid range is `0` to `100`. If set to `0`, Amazon EC2 Auto Scaling may scale capacity higher than the maximum capacity to equal but not exceed forecast capacity.
     * 
     */
    @Import(name="maxCapacityBuffer")
    private @Nullable Output<String> maxCapacityBuffer;

    /**
     * @return Size of the capacity buffer to use when the forecast capacity is close to or exceeds the maximum capacity. Valid range is `0` to `100`. If set to `0`, Amazon EC2 Auto Scaling may scale capacity higher than the maximum capacity to equal but not exceed forecast capacity.
     * 
     */
    public Optional<Output<String>> maxCapacityBuffer() {
        return Optional.ofNullable(this.maxCapacityBuffer);
    }

    /**
     * This structure includes the metrics and target utilization to use for predictive scaling.
     * 
     */
    @Import(name="metricSpecification", required=true)
    private Output<PolicyPredictiveScalingConfigurationMetricSpecificationArgs> metricSpecification;

    /**
     * @return This structure includes the metrics and target utilization to use for predictive scaling.
     * 
     */
    public Output<PolicyPredictiveScalingConfigurationMetricSpecificationArgs> metricSpecification() {
        return this.metricSpecification;
    }

    /**
     * Predictive scaling mode. Valid values are `ForecastAndScale` and `ForecastOnly`. Default is `ForecastOnly`.
     * 
     */
    @Import(name="mode")
    private @Nullable Output<String> mode;

    /**
     * @return Predictive scaling mode. Valid values are `ForecastAndScale` and `ForecastOnly`. Default is `ForecastOnly`.
     * 
     */
    public Optional<Output<String>> mode() {
        return Optional.ofNullable(this.mode);
    }

    /**
     * Amount of time, in seconds, by which the instance launch time can be advanced. Minimum is `0`.
     * 
     */
    @Import(name="schedulingBufferTime")
    private @Nullable Output<String> schedulingBufferTime;

    /**
     * @return Amount of time, in seconds, by which the instance launch time can be advanced. Minimum is `0`.
     * 
     */
    public Optional<Output<String>> schedulingBufferTime() {
        return Optional.ofNullable(this.schedulingBufferTime);
    }

    private PolicyPredictiveScalingConfigurationArgs() {}

    private PolicyPredictiveScalingConfigurationArgs(PolicyPredictiveScalingConfigurationArgs $) {
        this.maxCapacityBreachBehavior = $.maxCapacityBreachBehavior;
        this.maxCapacityBuffer = $.maxCapacityBuffer;
        this.metricSpecification = $.metricSpecification;
        this.mode = $.mode;
        this.schedulingBufferTime = $.schedulingBufferTime;
    }

    public static Builder builder() {
        return new Builder();
    }
    public static Builder builder(PolicyPredictiveScalingConfigurationArgs defaults) {
        return new Builder(defaults);
    }

    public static final class Builder {
        private PolicyPredictiveScalingConfigurationArgs $;

        public Builder() {
            $ = new PolicyPredictiveScalingConfigurationArgs();
        }

        public Builder(PolicyPredictiveScalingConfigurationArgs defaults) {
            $ = new PolicyPredictiveScalingConfigurationArgs(Objects.requireNonNull(defaults));
        }

        /**
         * @param maxCapacityBreachBehavior Defines the behavior that should be applied if the forecast capacity approaches or exceeds the maximum capacity of the Auto Scaling group. Valid values are `HonorMaxCapacity` or `IncreaseMaxCapacity`. Default is `HonorMaxCapacity`.
         * 
         * @return builder
         * 
         */
        public Builder maxCapacityBreachBehavior(@Nullable Output<String> maxCapacityBreachBehavior) {
            $.maxCapacityBreachBehavior = maxCapacityBreachBehavior;
            return this;
        }

        /**
         * @param maxCapacityBreachBehavior Defines the behavior that should be applied if the forecast capacity approaches or exceeds the maximum capacity of the Auto Scaling group. Valid values are `HonorMaxCapacity` or `IncreaseMaxCapacity`. Default is `HonorMaxCapacity`.
         * 
         * @return builder
         * 
         */
        public Builder maxCapacityBreachBehavior(String maxCapacityBreachBehavior) {
            return maxCapacityBreachBehavior(Output.of(maxCapacityBreachBehavior));
        }

        /**
         * @param maxCapacityBuffer Size of the capacity buffer to use when the forecast capacity is close to or exceeds the maximum capacity. Valid range is `0` to `100`. If set to `0`, Amazon EC2 Auto Scaling may scale capacity higher than the maximum capacity to equal but not exceed forecast capacity.
         * 
         * @return builder
         * 
         */
        public Builder maxCapacityBuffer(@Nullable Output<String> maxCapacityBuffer) {
            $.maxCapacityBuffer = maxCapacityBuffer;
            return this;
        }

        /**
         * @param maxCapacityBuffer Size of the capacity buffer to use when the forecast capacity is close to or exceeds the maximum capacity. Valid range is `0` to `100`. If set to `0`, Amazon EC2 Auto Scaling may scale capacity higher than the maximum capacity to equal but not exceed forecast capacity.
         * 
         * @return builder
         * 
         */
        public Builder maxCapacityBuffer(String maxCapacityBuffer) {
            return maxCapacityBuffer(Output.of(maxCapacityBuffer));
        }

        /**
         * @param metricSpecification This structure includes the metrics and target utilization to use for predictive scaling.
         * 
         * @return builder
         * 
         */
        public Builder metricSpecification(Output<PolicyPredictiveScalingConfigurationMetricSpecificationArgs> metricSpecification) {
            $.metricSpecification = metricSpecification;
            return this;
        }

        /**
         * @param metricSpecification This structure includes the metrics and target utilization to use for predictive scaling.
         * 
         * @return builder
         * 
         */
        public Builder metricSpecification(PolicyPredictiveScalingConfigurationMetricSpecificationArgs metricSpecification) {
            return metricSpecification(Output.of(metricSpecification));
        }

        /**
         * @param mode Predictive scaling mode. Valid values are `ForecastAndScale` and `ForecastOnly`. Default is `ForecastOnly`.
         * 
         * @return builder
         * 
         */
        public Builder mode(@Nullable Output<String> mode) {
            $.mode = mode;
            return this;
        }

        /**
         * @param mode Predictive scaling mode. Valid values are `ForecastAndScale` and `ForecastOnly`. Default is `ForecastOnly`.
         * 
         * @return builder
         * 
         */
        public Builder mode(String mode) {
            return mode(Output.of(mode));
        }

        /**
         * @param schedulingBufferTime Amount of time, in seconds, by which the instance launch time can be advanced. Minimum is `0`.
         * 
         * @return builder
         * 
         */
        public Builder schedulingBufferTime(@Nullable Output<String> schedulingBufferTime) {
            $.schedulingBufferTime = schedulingBufferTime;
            return this;
        }

        /**
         * @param schedulingBufferTime Amount of time, in seconds, by which the instance launch time can be advanced. Minimum is `0`.
         * 
         * @return builder
         * 
         */
        public Builder schedulingBufferTime(String schedulingBufferTime) {
            return schedulingBufferTime(Output.of(schedulingBufferTime));
        }

        public PolicyPredictiveScalingConfigurationArgs build() {
            $.metricSpecification = Objects.requireNonNull($.metricSpecification, "expected parameter 'metricSpecification' to be non-null");
            return $;
        }
    }

}
