// *** 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.evidently.inputs;

import com.pulumi.aws.evidently.inputs.LaunchScheduledSplitsConfigStepSegmentOverrideArgs;
import com.pulumi.core.Output;
import com.pulumi.core.annotations.Import;
import java.lang.Integer;
import java.lang.String;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import javax.annotation.Nullable;


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

    public static final LaunchScheduledSplitsConfigStepArgs Empty = new LaunchScheduledSplitsConfigStepArgs();

    /**
     * The traffic allocation percentages among the feature variations during one step of a launch. This is a set of key-value pairs. The keys are variation names. The values represent the percentage of traffic to allocate to that variation during this step. For more information, refer to the [AWS documentation for ScheduledSplitConfig groupWeights](https://docs.aws.amazon.com/cloudwatchevidently/latest/APIReference/API_ScheduledSplitConfig.html).
     * 
     */
    @Import(name="groupWeights", required=true)
    private Output<Map<String,Integer>> groupWeights;

    /**
     * @return The traffic allocation percentages among the feature variations during one step of a launch. This is a set of key-value pairs. The keys are variation names. The values represent the percentage of traffic to allocate to that variation during this step. For more information, refer to the [AWS documentation for ScheduledSplitConfig groupWeights](https://docs.aws.amazon.com/cloudwatchevidently/latest/APIReference/API_ScheduledSplitConfig.html).
     * 
     */
    public Output<Map<String,Integer>> groupWeights() {
        return this.groupWeights;
    }

    /**
     * One or up to six blocks that specify different traffic splits for one or more audience segments. A segment is a portion of your audience that share one or more characteristics. Examples could be Chrome browser users, users in Europe, or Firefox browser users in Europe who also fit other criteria that your application collects, such as age. Detailed below.
     * 
     */
    @Import(name="segmentOverrides")
    private @Nullable Output<List<LaunchScheduledSplitsConfigStepSegmentOverrideArgs>> segmentOverrides;

    /**
     * @return One or up to six blocks that specify different traffic splits for one or more audience segments. A segment is a portion of your audience that share one or more characteristics. Examples could be Chrome browser users, users in Europe, or Firefox browser users in Europe who also fit other criteria that your application collects, such as age. Detailed below.
     * 
     */
    public Optional<Output<List<LaunchScheduledSplitsConfigStepSegmentOverrideArgs>>> segmentOverrides() {
        return Optional.ofNullable(this.segmentOverrides);
    }

    /**
     * Specifies the date and time that this step of the launch starts.
     * 
     */
    @Import(name="startTime", required=true)
    private Output<String> startTime;

    /**
     * @return Specifies the date and time that this step of the launch starts.
     * 
     */
    public Output<String> startTime() {
        return this.startTime;
    }

    private LaunchScheduledSplitsConfigStepArgs() {}

    private LaunchScheduledSplitsConfigStepArgs(LaunchScheduledSplitsConfigStepArgs $) {
        this.groupWeights = $.groupWeights;
        this.segmentOverrides = $.segmentOverrides;
        this.startTime = $.startTime;
    }

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

    public static final class Builder {
        private LaunchScheduledSplitsConfigStepArgs $;

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

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

        /**
         * @param groupWeights The traffic allocation percentages among the feature variations during one step of a launch. This is a set of key-value pairs. The keys are variation names. The values represent the percentage of traffic to allocate to that variation during this step. For more information, refer to the [AWS documentation for ScheduledSplitConfig groupWeights](https://docs.aws.amazon.com/cloudwatchevidently/latest/APIReference/API_ScheduledSplitConfig.html).
         * 
         * @return builder
         * 
         */
        public Builder groupWeights(Output<Map<String,Integer>> groupWeights) {
            $.groupWeights = groupWeights;
            return this;
        }

        /**
         * @param groupWeights The traffic allocation percentages among the feature variations during one step of a launch. This is a set of key-value pairs. The keys are variation names. The values represent the percentage of traffic to allocate to that variation during this step. For more information, refer to the [AWS documentation for ScheduledSplitConfig groupWeights](https://docs.aws.amazon.com/cloudwatchevidently/latest/APIReference/API_ScheduledSplitConfig.html).
         * 
         * @return builder
         * 
         */
        public Builder groupWeights(Map<String,Integer> groupWeights) {
            return groupWeights(Output.of(groupWeights));
        }

        /**
         * @param segmentOverrides One or up to six blocks that specify different traffic splits for one or more audience segments. A segment is a portion of your audience that share one or more characteristics. Examples could be Chrome browser users, users in Europe, or Firefox browser users in Europe who also fit other criteria that your application collects, such as age. Detailed below.
         * 
         * @return builder
         * 
         */
        public Builder segmentOverrides(@Nullable Output<List<LaunchScheduledSplitsConfigStepSegmentOverrideArgs>> segmentOverrides) {
            $.segmentOverrides = segmentOverrides;
            return this;
        }

        /**
         * @param segmentOverrides One or up to six blocks that specify different traffic splits for one or more audience segments. A segment is a portion of your audience that share one or more characteristics. Examples could be Chrome browser users, users in Europe, or Firefox browser users in Europe who also fit other criteria that your application collects, such as age. Detailed below.
         * 
         * @return builder
         * 
         */
        public Builder segmentOverrides(List<LaunchScheduledSplitsConfigStepSegmentOverrideArgs> segmentOverrides) {
            return segmentOverrides(Output.of(segmentOverrides));
        }

        /**
         * @param segmentOverrides One or up to six blocks that specify different traffic splits for one or more audience segments. A segment is a portion of your audience that share one or more characteristics. Examples could be Chrome browser users, users in Europe, or Firefox browser users in Europe who also fit other criteria that your application collects, such as age. Detailed below.
         * 
         * @return builder
         * 
         */
        public Builder segmentOverrides(LaunchScheduledSplitsConfigStepSegmentOverrideArgs... segmentOverrides) {
            return segmentOverrides(List.of(segmentOverrides));
        }

        /**
         * @param startTime Specifies the date and time that this step of the launch starts.
         * 
         * @return builder
         * 
         */
        public Builder startTime(Output<String> startTime) {
            $.startTime = startTime;
            return this;
        }

        /**
         * @param startTime Specifies the date and time that this step of the launch starts.
         * 
         * @return builder
         * 
         */
        public Builder startTime(String startTime) {
            return startTime(Output.of(startTime));
        }

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

}
