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

import com.pulumi.aws.connect.inputs.UserHierarchyStructureHierarchyStructureLevelFiveArgs;
import com.pulumi.aws.connect.inputs.UserHierarchyStructureHierarchyStructureLevelFourArgs;
import com.pulumi.aws.connect.inputs.UserHierarchyStructureHierarchyStructureLevelOneArgs;
import com.pulumi.aws.connect.inputs.UserHierarchyStructureHierarchyStructureLevelThreeArgs;
import com.pulumi.aws.connect.inputs.UserHierarchyStructureHierarchyStructureLevelTwoArgs;
import com.pulumi.core.Output;
import com.pulumi.core.annotations.Import;
import java.util.Objects;
import java.util.Optional;
import javax.annotation.Nullable;


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

    public static final UserHierarchyStructureHierarchyStructureArgs Empty = new UserHierarchyStructureHierarchyStructureArgs();

    /**
     * A block that defines the details of level five. The level block is documented below.
     * 
     * Each level block supports the following arguments:
     * 
     */
    @Import(name="levelFive")
    private @Nullable Output<UserHierarchyStructureHierarchyStructureLevelFiveArgs> levelFive;

    /**
     * @return A block that defines the details of level five. The level block is documented below.
     * 
     * Each level block supports the following arguments:
     * 
     */
    public Optional<Output<UserHierarchyStructureHierarchyStructureLevelFiveArgs>> levelFive() {
        return Optional.ofNullable(this.levelFive);
    }

    /**
     * A block that defines the details of level four. The level block is documented below.
     * 
     */
    @Import(name="levelFour")
    private @Nullable Output<UserHierarchyStructureHierarchyStructureLevelFourArgs> levelFour;

    /**
     * @return A block that defines the details of level four. The level block is documented below.
     * 
     */
    public Optional<Output<UserHierarchyStructureHierarchyStructureLevelFourArgs>> levelFour() {
        return Optional.ofNullable(this.levelFour);
    }

    /**
     * A block that defines the details of level one. The level block is documented below.
     * 
     */
    @Import(name="levelOne")
    private @Nullable Output<UserHierarchyStructureHierarchyStructureLevelOneArgs> levelOne;

    /**
     * @return A block that defines the details of level one. The level block is documented below.
     * 
     */
    public Optional<Output<UserHierarchyStructureHierarchyStructureLevelOneArgs>> levelOne() {
        return Optional.ofNullable(this.levelOne);
    }

    /**
     * A block that defines the details of level three. The level block is documented below.
     * 
     */
    @Import(name="levelThree")
    private @Nullable Output<UserHierarchyStructureHierarchyStructureLevelThreeArgs> levelThree;

    /**
     * @return A block that defines the details of level three. The level block is documented below.
     * 
     */
    public Optional<Output<UserHierarchyStructureHierarchyStructureLevelThreeArgs>> levelThree() {
        return Optional.ofNullable(this.levelThree);
    }

    /**
     * A block that defines the details of level two. The level block is documented below.
     * 
     */
    @Import(name="levelTwo")
    private @Nullable Output<UserHierarchyStructureHierarchyStructureLevelTwoArgs> levelTwo;

    /**
     * @return A block that defines the details of level two. The level block is documented below.
     * 
     */
    public Optional<Output<UserHierarchyStructureHierarchyStructureLevelTwoArgs>> levelTwo() {
        return Optional.ofNullable(this.levelTwo);
    }

    private UserHierarchyStructureHierarchyStructureArgs() {}

    private UserHierarchyStructureHierarchyStructureArgs(UserHierarchyStructureHierarchyStructureArgs $) {
        this.levelFive = $.levelFive;
        this.levelFour = $.levelFour;
        this.levelOne = $.levelOne;
        this.levelThree = $.levelThree;
        this.levelTwo = $.levelTwo;
    }

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

    public static final class Builder {
        private UserHierarchyStructureHierarchyStructureArgs $;

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

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

        /**
         * @param levelFive A block that defines the details of level five. The level block is documented below.
         * 
         * Each level block supports the following arguments:
         * 
         * @return builder
         * 
         */
        public Builder levelFive(@Nullable Output<UserHierarchyStructureHierarchyStructureLevelFiveArgs> levelFive) {
            $.levelFive = levelFive;
            return this;
        }

        /**
         * @param levelFive A block that defines the details of level five. The level block is documented below.
         * 
         * Each level block supports the following arguments:
         * 
         * @return builder
         * 
         */
        public Builder levelFive(UserHierarchyStructureHierarchyStructureLevelFiveArgs levelFive) {
            return levelFive(Output.of(levelFive));
        }

        /**
         * @param levelFour A block that defines the details of level four. The level block is documented below.
         * 
         * @return builder
         * 
         */
        public Builder levelFour(@Nullable Output<UserHierarchyStructureHierarchyStructureLevelFourArgs> levelFour) {
            $.levelFour = levelFour;
            return this;
        }

        /**
         * @param levelFour A block that defines the details of level four. The level block is documented below.
         * 
         * @return builder
         * 
         */
        public Builder levelFour(UserHierarchyStructureHierarchyStructureLevelFourArgs levelFour) {
            return levelFour(Output.of(levelFour));
        }

        /**
         * @param levelOne A block that defines the details of level one. The level block is documented below.
         * 
         * @return builder
         * 
         */
        public Builder levelOne(@Nullable Output<UserHierarchyStructureHierarchyStructureLevelOneArgs> levelOne) {
            $.levelOne = levelOne;
            return this;
        }

        /**
         * @param levelOne A block that defines the details of level one. The level block is documented below.
         * 
         * @return builder
         * 
         */
        public Builder levelOne(UserHierarchyStructureHierarchyStructureLevelOneArgs levelOne) {
            return levelOne(Output.of(levelOne));
        }

        /**
         * @param levelThree A block that defines the details of level three. The level block is documented below.
         * 
         * @return builder
         * 
         */
        public Builder levelThree(@Nullable Output<UserHierarchyStructureHierarchyStructureLevelThreeArgs> levelThree) {
            $.levelThree = levelThree;
            return this;
        }

        /**
         * @param levelThree A block that defines the details of level three. The level block is documented below.
         * 
         * @return builder
         * 
         */
        public Builder levelThree(UserHierarchyStructureHierarchyStructureLevelThreeArgs levelThree) {
            return levelThree(Output.of(levelThree));
        }

        /**
         * @param levelTwo A block that defines the details of level two. The level block is documented below.
         * 
         * @return builder
         * 
         */
        public Builder levelTwo(@Nullable Output<UserHierarchyStructureHierarchyStructureLevelTwoArgs> levelTwo) {
            $.levelTwo = levelTwo;
            return this;
        }

        /**
         * @param levelTwo A block that defines the details of level two. The level block is documented below.
         * 
         * @return builder
         * 
         */
        public Builder levelTwo(UserHierarchyStructureHierarchyStructureLevelTwoArgs levelTwo) {
            return levelTwo(Output.of(levelTwo));
        }

        public UserHierarchyStructureHierarchyStructureArgs build() {
            return $;
        }
    }

}
