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

import com.pulumi.aws.ec2.inputs.NetworkInsightsAnalysisAlternatePathHintArgs;
import com.pulumi.aws.ec2.inputs.NetworkInsightsAnalysisExplanationArgs;
import com.pulumi.aws.ec2.inputs.NetworkInsightsAnalysisForwardPathComponentArgs;
import com.pulumi.aws.ec2.inputs.NetworkInsightsAnalysisReturnPathComponentArgs;
import com.pulumi.core.Output;
import com.pulumi.core.annotations.Import;
import java.lang.Boolean;
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 NetworkInsightsAnalysisState extends com.pulumi.resources.ResourceArgs {

    public static final NetworkInsightsAnalysisState Empty = new NetworkInsightsAnalysisState();

    /**
     * Potential intermediate components of a feasible path. Described below.
     * 
     */
    @Import(name="alternatePathHints")
    private @Nullable Output<List<NetworkInsightsAnalysisAlternatePathHintArgs>> alternatePathHints;

    /**
     * @return Potential intermediate components of a feasible path. Described below.
     * 
     */
    public Optional<Output<List<NetworkInsightsAnalysisAlternatePathHintArgs>>> alternatePathHints() {
        return Optional.ofNullable(this.alternatePathHints);
    }

    /**
     * ARN of the Network Insights Analysis.
     * 
     */
    @Import(name="arn")
    private @Nullable Output<String> arn;

    /**
     * @return ARN of the Network Insights Analysis.
     * 
     */
    public Optional<Output<String>> arn() {
        return Optional.ofNullable(this.arn);
    }

    /**
     * Explanation codes for an unreachable path. See the [AWS documentation](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_Explanation.html) for details.
     * 
     */
    @Import(name="explanations")
    private @Nullable Output<List<NetworkInsightsAnalysisExplanationArgs>> explanations;

    /**
     * @return Explanation codes for an unreachable path. See the [AWS documentation](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_Explanation.html) for details.
     * 
     */
    public Optional<Output<List<NetworkInsightsAnalysisExplanationArgs>>> explanations() {
        return Optional.ofNullable(this.explanations);
    }

    /**
     * A list of ARNs for resources the path must traverse.
     * 
     */
    @Import(name="filterInArns")
    private @Nullable Output<List<String>> filterInArns;

    /**
     * @return A list of ARNs for resources the path must traverse.
     * 
     */
    public Optional<Output<List<String>>> filterInArns() {
        return Optional.ofNullable(this.filterInArns);
    }

    /**
     * The components in the path from source to destination. See the [AWS documentation](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_PathComponent.html) for details.
     * 
     */
    @Import(name="forwardPathComponents")
    private @Nullable Output<List<NetworkInsightsAnalysisForwardPathComponentArgs>> forwardPathComponents;

    /**
     * @return The components in the path from source to destination. See the [AWS documentation](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_PathComponent.html) for details.
     * 
     */
    public Optional<Output<List<NetworkInsightsAnalysisForwardPathComponentArgs>>> forwardPathComponents() {
        return Optional.ofNullable(this.forwardPathComponents);
    }

    /**
     * ID of the Network Insights Path to run an analysis on.
     * 
     * The following arguments are optional:
     * 
     */
    @Import(name="networkInsightsPathId")
    private @Nullable Output<String> networkInsightsPathId;

    /**
     * @return ID of the Network Insights Path to run an analysis on.
     * 
     * The following arguments are optional:
     * 
     */
    public Optional<Output<String>> networkInsightsPathId() {
        return Optional.ofNullable(this.networkInsightsPathId);
    }

    /**
     * Set to `true` if the destination was reachable.
     * 
     */
    @Import(name="pathFound")
    private @Nullable Output<Boolean> pathFound;

    /**
     * @return Set to `true` if the destination was reachable.
     * 
     */
    public Optional<Output<Boolean>> pathFound() {
        return Optional.ofNullable(this.pathFound);
    }

    /**
     * The components in the path from destination to source. See the [AWS documentation](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_PathComponent.html) for details.
     * 
     */
    @Import(name="returnPathComponents")
    private @Nullable Output<List<NetworkInsightsAnalysisReturnPathComponentArgs>> returnPathComponents;

    /**
     * @return The components in the path from destination to source. See the [AWS documentation](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_PathComponent.html) for details.
     * 
     */
    public Optional<Output<List<NetworkInsightsAnalysisReturnPathComponentArgs>>> returnPathComponents() {
        return Optional.ofNullable(this.returnPathComponents);
    }

    /**
     * The date/time the analysis was started.
     * 
     */
    @Import(name="startDate")
    private @Nullable Output<String> startDate;

    /**
     * @return The date/time the analysis was started.
     * 
     */
    public Optional<Output<String>> startDate() {
        return Optional.ofNullable(this.startDate);
    }

    /**
     * The status of the analysis. `succeeded` means the analysis was completed, not that a path was found, for that see `path_found`.
     * 
     */
    @Import(name="status")
    private @Nullable Output<String> status;

    /**
     * @return The status of the analysis. `succeeded` means the analysis was completed, not that a path was found, for that see `path_found`.
     * 
     */
    public Optional<Output<String>> status() {
        return Optional.ofNullable(this.status);
    }

    /**
     * A message to provide more context when the `status` is `failed`.
     * 
     */
    @Import(name="statusMessage")
    private @Nullable Output<String> statusMessage;

    /**
     * @return A message to provide more context when the `status` is `failed`.
     * 
     */
    public Optional<Output<String>> statusMessage() {
        return Optional.ofNullable(this.statusMessage);
    }

    /**
     * Map of tags to assign to the resource. If configured with a provider `default_tags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.
     * 
     */
    @Import(name="tags")
    private @Nullable Output<Map<String,String>> tags;

    /**
     * @return Map of tags to assign to the resource. If configured with a provider `default_tags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.
     * 
     */
    public Optional<Output<Map<String,String>>> tags() {
        return Optional.ofNullable(this.tags);
    }

    /**
     * Map of tags assigned to the resource, including those inherited from the provider `default_tags` configuration block.
     * 
     */
    @Import(name="tagsAll")
    private @Nullable Output<Map<String,String>> tagsAll;

    /**
     * @return Map of tags assigned to the resource, including those inherited from the provider `default_tags` configuration block.
     * 
     */
    public Optional<Output<Map<String,String>>> tagsAll() {
        return Optional.ofNullable(this.tagsAll);
    }

    /**
     * If enabled, the resource will wait for the Network Insights Analysis status to change to `succeeded` or `failed`. Setting this to `false` will skip the process. Default: `true`.
     * 
     */
    @Import(name="waitForCompletion")
    private @Nullable Output<Boolean> waitForCompletion;

    /**
     * @return If enabled, the resource will wait for the Network Insights Analysis status to change to `succeeded` or `failed`. Setting this to `false` will skip the process. Default: `true`.
     * 
     */
    public Optional<Output<Boolean>> waitForCompletion() {
        return Optional.ofNullable(this.waitForCompletion);
    }

    /**
     * The warning message.
     * 
     */
    @Import(name="warningMessage")
    private @Nullable Output<String> warningMessage;

    /**
     * @return The warning message.
     * 
     */
    public Optional<Output<String>> warningMessage() {
        return Optional.ofNullable(this.warningMessage);
    }

    private NetworkInsightsAnalysisState() {}

    private NetworkInsightsAnalysisState(NetworkInsightsAnalysisState $) {
        this.alternatePathHints = $.alternatePathHints;
        this.arn = $.arn;
        this.explanations = $.explanations;
        this.filterInArns = $.filterInArns;
        this.forwardPathComponents = $.forwardPathComponents;
        this.networkInsightsPathId = $.networkInsightsPathId;
        this.pathFound = $.pathFound;
        this.returnPathComponents = $.returnPathComponents;
        this.startDate = $.startDate;
        this.status = $.status;
        this.statusMessage = $.statusMessage;
        this.tags = $.tags;
        this.tagsAll = $.tagsAll;
        this.waitForCompletion = $.waitForCompletion;
        this.warningMessage = $.warningMessage;
    }

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

    public static final class Builder {
        private NetworkInsightsAnalysisState $;

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

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

        /**
         * @param alternatePathHints Potential intermediate components of a feasible path. Described below.
         * 
         * @return builder
         * 
         */
        public Builder alternatePathHints(@Nullable Output<List<NetworkInsightsAnalysisAlternatePathHintArgs>> alternatePathHints) {
            $.alternatePathHints = alternatePathHints;
            return this;
        }

        /**
         * @param alternatePathHints Potential intermediate components of a feasible path. Described below.
         * 
         * @return builder
         * 
         */
        public Builder alternatePathHints(List<NetworkInsightsAnalysisAlternatePathHintArgs> alternatePathHints) {
            return alternatePathHints(Output.of(alternatePathHints));
        }

        /**
         * @param alternatePathHints Potential intermediate components of a feasible path. Described below.
         * 
         * @return builder
         * 
         */
        public Builder alternatePathHints(NetworkInsightsAnalysisAlternatePathHintArgs... alternatePathHints) {
            return alternatePathHints(List.of(alternatePathHints));
        }

        /**
         * @param arn ARN of the Network Insights Analysis.
         * 
         * @return builder
         * 
         */
        public Builder arn(@Nullable Output<String> arn) {
            $.arn = arn;
            return this;
        }

        /**
         * @param arn ARN of the Network Insights Analysis.
         * 
         * @return builder
         * 
         */
        public Builder arn(String arn) {
            return arn(Output.of(arn));
        }

        /**
         * @param explanations Explanation codes for an unreachable path. See the [AWS documentation](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_Explanation.html) for details.
         * 
         * @return builder
         * 
         */
        public Builder explanations(@Nullable Output<List<NetworkInsightsAnalysisExplanationArgs>> explanations) {
            $.explanations = explanations;
            return this;
        }

        /**
         * @param explanations Explanation codes for an unreachable path. See the [AWS documentation](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_Explanation.html) for details.
         * 
         * @return builder
         * 
         */
        public Builder explanations(List<NetworkInsightsAnalysisExplanationArgs> explanations) {
            return explanations(Output.of(explanations));
        }

        /**
         * @param explanations Explanation codes for an unreachable path. See the [AWS documentation](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_Explanation.html) for details.
         * 
         * @return builder
         * 
         */
        public Builder explanations(NetworkInsightsAnalysisExplanationArgs... explanations) {
            return explanations(List.of(explanations));
        }

        /**
         * @param filterInArns A list of ARNs for resources the path must traverse.
         * 
         * @return builder
         * 
         */
        public Builder filterInArns(@Nullable Output<List<String>> filterInArns) {
            $.filterInArns = filterInArns;
            return this;
        }

        /**
         * @param filterInArns A list of ARNs for resources the path must traverse.
         * 
         * @return builder
         * 
         */
        public Builder filterInArns(List<String> filterInArns) {
            return filterInArns(Output.of(filterInArns));
        }

        /**
         * @param filterInArns A list of ARNs for resources the path must traverse.
         * 
         * @return builder
         * 
         */
        public Builder filterInArns(String... filterInArns) {
            return filterInArns(List.of(filterInArns));
        }

        /**
         * @param forwardPathComponents The components in the path from source to destination. See the [AWS documentation](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_PathComponent.html) for details.
         * 
         * @return builder
         * 
         */
        public Builder forwardPathComponents(@Nullable Output<List<NetworkInsightsAnalysisForwardPathComponentArgs>> forwardPathComponents) {
            $.forwardPathComponents = forwardPathComponents;
            return this;
        }

        /**
         * @param forwardPathComponents The components in the path from source to destination. See the [AWS documentation](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_PathComponent.html) for details.
         * 
         * @return builder
         * 
         */
        public Builder forwardPathComponents(List<NetworkInsightsAnalysisForwardPathComponentArgs> forwardPathComponents) {
            return forwardPathComponents(Output.of(forwardPathComponents));
        }

        /**
         * @param forwardPathComponents The components in the path from source to destination. See the [AWS documentation](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_PathComponent.html) for details.
         * 
         * @return builder
         * 
         */
        public Builder forwardPathComponents(NetworkInsightsAnalysisForwardPathComponentArgs... forwardPathComponents) {
            return forwardPathComponents(List.of(forwardPathComponents));
        }

        /**
         * @param networkInsightsPathId ID of the Network Insights Path to run an analysis on.
         * 
         * The following arguments are optional:
         * 
         * @return builder
         * 
         */
        public Builder networkInsightsPathId(@Nullable Output<String> networkInsightsPathId) {
            $.networkInsightsPathId = networkInsightsPathId;
            return this;
        }

        /**
         * @param networkInsightsPathId ID of the Network Insights Path to run an analysis on.
         * 
         * The following arguments are optional:
         * 
         * @return builder
         * 
         */
        public Builder networkInsightsPathId(String networkInsightsPathId) {
            return networkInsightsPathId(Output.of(networkInsightsPathId));
        }

        /**
         * @param pathFound Set to `true` if the destination was reachable.
         * 
         * @return builder
         * 
         */
        public Builder pathFound(@Nullable Output<Boolean> pathFound) {
            $.pathFound = pathFound;
            return this;
        }

        /**
         * @param pathFound Set to `true` if the destination was reachable.
         * 
         * @return builder
         * 
         */
        public Builder pathFound(Boolean pathFound) {
            return pathFound(Output.of(pathFound));
        }

        /**
         * @param returnPathComponents The components in the path from destination to source. See the [AWS documentation](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_PathComponent.html) for details.
         * 
         * @return builder
         * 
         */
        public Builder returnPathComponents(@Nullable Output<List<NetworkInsightsAnalysisReturnPathComponentArgs>> returnPathComponents) {
            $.returnPathComponents = returnPathComponents;
            return this;
        }

        /**
         * @param returnPathComponents The components in the path from destination to source. See the [AWS documentation](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_PathComponent.html) for details.
         * 
         * @return builder
         * 
         */
        public Builder returnPathComponents(List<NetworkInsightsAnalysisReturnPathComponentArgs> returnPathComponents) {
            return returnPathComponents(Output.of(returnPathComponents));
        }

        /**
         * @param returnPathComponents The components in the path from destination to source. See the [AWS documentation](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_PathComponent.html) for details.
         * 
         * @return builder
         * 
         */
        public Builder returnPathComponents(NetworkInsightsAnalysisReturnPathComponentArgs... returnPathComponents) {
            return returnPathComponents(List.of(returnPathComponents));
        }

        /**
         * @param startDate The date/time the analysis was started.
         * 
         * @return builder
         * 
         */
        public Builder startDate(@Nullable Output<String> startDate) {
            $.startDate = startDate;
            return this;
        }

        /**
         * @param startDate The date/time the analysis was started.
         * 
         * @return builder
         * 
         */
        public Builder startDate(String startDate) {
            return startDate(Output.of(startDate));
        }

        /**
         * @param status The status of the analysis. `succeeded` means the analysis was completed, not that a path was found, for that see `path_found`.
         * 
         * @return builder
         * 
         */
        public Builder status(@Nullable Output<String> status) {
            $.status = status;
            return this;
        }

        /**
         * @param status The status of the analysis. `succeeded` means the analysis was completed, not that a path was found, for that see `path_found`.
         * 
         * @return builder
         * 
         */
        public Builder status(String status) {
            return status(Output.of(status));
        }

        /**
         * @param statusMessage A message to provide more context when the `status` is `failed`.
         * 
         * @return builder
         * 
         */
        public Builder statusMessage(@Nullable Output<String> statusMessage) {
            $.statusMessage = statusMessage;
            return this;
        }

        /**
         * @param statusMessage A message to provide more context when the `status` is `failed`.
         * 
         * @return builder
         * 
         */
        public Builder statusMessage(String statusMessage) {
            return statusMessage(Output.of(statusMessage));
        }

        /**
         * @param tags Map of tags to assign to the resource. If configured with a provider `default_tags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.
         * 
         * @return builder
         * 
         */
        public Builder tags(@Nullable Output<Map<String,String>> tags) {
            $.tags = tags;
            return this;
        }

        /**
         * @param tags Map of tags to assign to the resource. If configured with a provider `default_tags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.
         * 
         * @return builder
         * 
         */
        public Builder tags(Map<String,String> tags) {
            return tags(Output.of(tags));
        }

        /**
         * @param tagsAll Map of tags assigned to the resource, including those inherited from the provider `default_tags` configuration block.
         * 
         * @return builder
         * 
         */
        public Builder tagsAll(@Nullable Output<Map<String,String>> tagsAll) {
            $.tagsAll = tagsAll;
            return this;
        }

        /**
         * @param tagsAll Map of tags assigned to the resource, including those inherited from the provider `default_tags` configuration block.
         * 
         * @return builder
         * 
         */
        public Builder tagsAll(Map<String,String> tagsAll) {
            return tagsAll(Output.of(tagsAll));
        }

        /**
         * @param waitForCompletion If enabled, the resource will wait for the Network Insights Analysis status to change to `succeeded` or `failed`. Setting this to `false` will skip the process. Default: `true`.
         * 
         * @return builder
         * 
         */
        public Builder waitForCompletion(@Nullable Output<Boolean> waitForCompletion) {
            $.waitForCompletion = waitForCompletion;
            return this;
        }

        /**
         * @param waitForCompletion If enabled, the resource will wait for the Network Insights Analysis status to change to `succeeded` or `failed`. Setting this to `false` will skip the process. Default: `true`.
         * 
         * @return builder
         * 
         */
        public Builder waitForCompletion(Boolean waitForCompletion) {
            return waitForCompletion(Output.of(waitForCompletion));
        }

        /**
         * @param warningMessage The warning message.
         * 
         * @return builder
         * 
         */
        public Builder warningMessage(@Nullable Output<String> warningMessage) {
            $.warningMessage = warningMessage;
            return this;
        }

        /**
         * @param warningMessage The warning message.
         * 
         * @return builder
         * 
         */
        public Builder warningMessage(String warningMessage) {
            return warningMessage(Output.of(warningMessage));
        }

        public NetworkInsightsAnalysisState build() {
            return $;
        }
    }

}
