// *** 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.UserHierarchyGroupHierarchyPathLevelFifeArgs;
import com.pulumi.aws.connect.inputs.UserHierarchyGroupHierarchyPathLevelFourArgs;
import com.pulumi.aws.connect.inputs.UserHierarchyGroupHierarchyPathLevelOneArgs;
import com.pulumi.aws.connect.inputs.UserHierarchyGroupHierarchyPathLevelThreeArgs;
import com.pulumi.aws.connect.inputs.UserHierarchyGroupHierarchyPathLevelTwoArgs;
import com.pulumi.core.Output;
import com.pulumi.core.annotations.Import;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import javax.annotation.Nullable;


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

    public static final UserHierarchyGroupHierarchyPathArgs Empty = new UserHierarchyGroupHierarchyPathArgs();

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

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

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

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

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

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

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

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

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

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

    private UserHierarchyGroupHierarchyPathArgs() {}

    private UserHierarchyGroupHierarchyPathArgs(UserHierarchyGroupHierarchyPathArgs $) {
        this.levelFives = $.levelFives;
        this.levelFours = $.levelFours;
        this.levelOnes = $.levelOnes;
        this.levelThrees = $.levelThrees;
        this.levelTwos = $.levelTwos;
    }

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

    public static final class Builder {
        private UserHierarchyGroupHierarchyPathArgs $;

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

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

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

        /**
         * @param levelFives A block that defines the details of level five. The level block is documented below.
         * 
         * @return builder
         * 
         */
        public Builder levelFives(List<UserHierarchyGroupHierarchyPathLevelFifeArgs> levelFives) {
            return levelFives(Output.of(levelFives));
        }

        /**
         * @param levelFives A block that defines the details of level five. The level block is documented below.
         * 
         * @return builder
         * 
         */
        public Builder levelFives(UserHierarchyGroupHierarchyPathLevelFifeArgs... levelFives) {
            return levelFives(List.of(levelFives));
        }

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

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

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

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

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

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

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

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

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

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

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

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

        public UserHierarchyGroupHierarchyPathArgs build() {
            return $;
        }
    }

}
