// *** 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.UserIdentityInfoArgs;
import com.pulumi.aws.connect.inputs.UserPhoneConfigArgs;
import com.pulumi.core.Output;
import com.pulumi.core.annotations.Import;
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 UserState extends com.pulumi.resources.ResourceArgs {

    public static final UserState Empty = new UserState();

    /**
     * The Amazon Resource Name (ARN) of the user.
     * 
     */
    @Import(name="arn")
    private @Nullable Output<String> arn;

    /**
     * @return The Amazon Resource Name (ARN) of the user.
     * 
     */
    public Optional<Output<String>> arn() {
        return Optional.ofNullable(this.arn);
    }

    /**
     * The identifier of the user account in the directory used for identity management. If Amazon Connect cannot access the directory, you can specify this identifier to authenticate users. If you include the identifier, we assume that Amazon Connect cannot access the directory. Otherwise, the identity information is used to authenticate users from your directory. This parameter is required if you are using an existing directory for identity management in Amazon Connect when Amazon Connect cannot access your directory to authenticate users. If you are using SAML for identity management and include this parameter, an error is returned.
     * 
     */
    @Import(name="directoryUserId")
    private @Nullable Output<String> directoryUserId;

    /**
     * @return The identifier of the user account in the directory used for identity management. If Amazon Connect cannot access the directory, you can specify this identifier to authenticate users. If you include the identifier, we assume that Amazon Connect cannot access the directory. Otherwise, the identity information is used to authenticate users from your directory. This parameter is required if you are using an existing directory for identity management in Amazon Connect when Amazon Connect cannot access your directory to authenticate users. If you are using SAML for identity management and include this parameter, an error is returned.
     * 
     */
    public Optional<Output<String>> directoryUserId() {
        return Optional.ofNullable(this.directoryUserId);
    }

    /**
     * The identifier of the hierarchy group for the user.
     * 
     */
    @Import(name="hierarchyGroupId")
    private @Nullable Output<String> hierarchyGroupId;

    /**
     * @return The identifier of the hierarchy group for the user.
     * 
     */
    public Optional<Output<String>> hierarchyGroupId() {
        return Optional.ofNullable(this.hierarchyGroupId);
    }

    /**
     * A block that contains information about the identity of the user. Documented below.
     * 
     */
    @Import(name="identityInfo")
    private @Nullable Output<UserIdentityInfoArgs> identityInfo;

    /**
     * @return A block that contains information about the identity of the user. Documented below.
     * 
     */
    public Optional<Output<UserIdentityInfoArgs>> identityInfo() {
        return Optional.ofNullable(this.identityInfo);
    }

    /**
     * Specifies the identifier of the hosting Amazon Connect Instance.
     * 
     */
    @Import(name="instanceId")
    private @Nullable Output<String> instanceId;

    /**
     * @return Specifies the identifier of the hosting Amazon Connect Instance.
     * 
     */
    public Optional<Output<String>> instanceId() {
        return Optional.ofNullable(this.instanceId);
    }

    /**
     * The user name for the account. For instances not using SAML for identity management, the user name can include up to 20 characters. If you are using SAML for identity management, the user name can include up to 64 characters from `[a-zA-Z0-9_-.\@]+`.
     * 
     */
    @Import(name="name")
    private @Nullable Output<String> name;

    /**
     * @return The user name for the account. For instances not using SAML for identity management, the user name can include up to 20 characters. If you are using SAML for identity management, the user name can include up to 64 characters from `[a-zA-Z0-9_-.\@]+`.
     * 
     */
    public Optional<Output<String>> name() {
        return Optional.ofNullable(this.name);
    }

    /**
     * The password for the user account. A password is required if you are using Amazon Connect for identity management. Otherwise, it is an error to include a password.
     * 
     */
    @Import(name="password")
    private @Nullable Output<String> password;

    /**
     * @return The password for the user account. A password is required if you are using Amazon Connect for identity management. Otherwise, it is an error to include a password.
     * 
     */
    public Optional<Output<String>> password() {
        return Optional.ofNullable(this.password);
    }

    /**
     * A block that contains information about the phone settings for the user. Documented below.
     * 
     */
    @Import(name="phoneConfig")
    private @Nullable Output<UserPhoneConfigArgs> phoneConfig;

    /**
     * @return A block that contains information about the phone settings for the user. Documented below.
     * 
     */
    public Optional<Output<UserPhoneConfigArgs>> phoneConfig() {
        return Optional.ofNullable(this.phoneConfig);
    }

    /**
     * The identifier of the routing profile for the user.
     * 
     */
    @Import(name="routingProfileId")
    private @Nullable Output<String> routingProfileId;

    /**
     * @return The identifier of the routing profile for the user.
     * 
     */
    public Optional<Output<String>> routingProfileId() {
        return Optional.ofNullable(this.routingProfileId);
    }

    /**
     * A list of identifiers for the security profiles for the user. Specify a minimum of 1 and maximum of 10 security profile ids. For more information, see [Best Practices for Security Profiles](https://docs.aws.amazon.com/connect/latest/adminguide/security-profile-best-practices.html) in the Amazon Connect Administrator Guide.
     * 
     */
    @Import(name="securityProfileIds")
    private @Nullable Output<List<String>> securityProfileIds;

    /**
     * @return A list of identifiers for the security profiles for the user. Specify a minimum of 1 and maximum of 10 security profile ids. For more information, see [Best Practices for Security Profiles](https://docs.aws.amazon.com/connect/latest/adminguide/security-profile-best-practices.html) in the Amazon Connect Administrator Guide.
     * 
     */
    public Optional<Output<List<String>>> securityProfileIds() {
        return Optional.ofNullable(this.securityProfileIds);
    }

    /**
     * Tags to apply to the user. 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 Tags to apply to the user. 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);
    }

    /**
     * A 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 A 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);
    }

    /**
     * The identifier for the user.
     * 
     */
    @Import(name="userId")
    private @Nullable Output<String> userId;

    /**
     * @return The identifier for the user.
     * 
     */
    public Optional<Output<String>> userId() {
        return Optional.ofNullable(this.userId);
    }

    private UserState() {}

    private UserState(UserState $) {
        this.arn = $.arn;
        this.directoryUserId = $.directoryUserId;
        this.hierarchyGroupId = $.hierarchyGroupId;
        this.identityInfo = $.identityInfo;
        this.instanceId = $.instanceId;
        this.name = $.name;
        this.password = $.password;
        this.phoneConfig = $.phoneConfig;
        this.routingProfileId = $.routingProfileId;
        this.securityProfileIds = $.securityProfileIds;
        this.tags = $.tags;
        this.tagsAll = $.tagsAll;
        this.userId = $.userId;
    }

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

    public static final class Builder {
        private UserState $;

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

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

        /**
         * @param arn The Amazon Resource Name (ARN) of the user.
         * 
         * @return builder
         * 
         */
        public Builder arn(@Nullable Output<String> arn) {
            $.arn = arn;
            return this;
        }

        /**
         * @param arn The Amazon Resource Name (ARN) of the user.
         * 
         * @return builder
         * 
         */
        public Builder arn(String arn) {
            return arn(Output.of(arn));
        }

        /**
         * @param directoryUserId The identifier of the user account in the directory used for identity management. If Amazon Connect cannot access the directory, you can specify this identifier to authenticate users. If you include the identifier, we assume that Amazon Connect cannot access the directory. Otherwise, the identity information is used to authenticate users from your directory. This parameter is required if you are using an existing directory for identity management in Amazon Connect when Amazon Connect cannot access your directory to authenticate users. If you are using SAML for identity management and include this parameter, an error is returned.
         * 
         * @return builder
         * 
         */
        public Builder directoryUserId(@Nullable Output<String> directoryUserId) {
            $.directoryUserId = directoryUserId;
            return this;
        }

        /**
         * @param directoryUserId The identifier of the user account in the directory used for identity management. If Amazon Connect cannot access the directory, you can specify this identifier to authenticate users. If you include the identifier, we assume that Amazon Connect cannot access the directory. Otherwise, the identity information is used to authenticate users from your directory. This parameter is required if you are using an existing directory for identity management in Amazon Connect when Amazon Connect cannot access your directory to authenticate users. If you are using SAML for identity management and include this parameter, an error is returned.
         * 
         * @return builder
         * 
         */
        public Builder directoryUserId(String directoryUserId) {
            return directoryUserId(Output.of(directoryUserId));
        }

        /**
         * @param hierarchyGroupId The identifier of the hierarchy group for the user.
         * 
         * @return builder
         * 
         */
        public Builder hierarchyGroupId(@Nullable Output<String> hierarchyGroupId) {
            $.hierarchyGroupId = hierarchyGroupId;
            return this;
        }

        /**
         * @param hierarchyGroupId The identifier of the hierarchy group for the user.
         * 
         * @return builder
         * 
         */
        public Builder hierarchyGroupId(String hierarchyGroupId) {
            return hierarchyGroupId(Output.of(hierarchyGroupId));
        }

        /**
         * @param identityInfo A block that contains information about the identity of the user. Documented below.
         * 
         * @return builder
         * 
         */
        public Builder identityInfo(@Nullable Output<UserIdentityInfoArgs> identityInfo) {
            $.identityInfo = identityInfo;
            return this;
        }

        /**
         * @param identityInfo A block that contains information about the identity of the user. Documented below.
         * 
         * @return builder
         * 
         */
        public Builder identityInfo(UserIdentityInfoArgs identityInfo) {
            return identityInfo(Output.of(identityInfo));
        }

        /**
         * @param instanceId Specifies the identifier of the hosting Amazon Connect Instance.
         * 
         * @return builder
         * 
         */
        public Builder instanceId(@Nullable Output<String> instanceId) {
            $.instanceId = instanceId;
            return this;
        }

        /**
         * @param instanceId Specifies the identifier of the hosting Amazon Connect Instance.
         * 
         * @return builder
         * 
         */
        public Builder instanceId(String instanceId) {
            return instanceId(Output.of(instanceId));
        }

        /**
         * @param name The user name for the account. For instances not using SAML for identity management, the user name can include up to 20 characters. If you are using SAML for identity management, the user name can include up to 64 characters from `[a-zA-Z0-9_-.\@]+`.
         * 
         * @return builder
         * 
         */
        public Builder name(@Nullable Output<String> name) {
            $.name = name;
            return this;
        }

        /**
         * @param name The user name for the account. For instances not using SAML for identity management, the user name can include up to 20 characters. If you are using SAML for identity management, the user name can include up to 64 characters from `[a-zA-Z0-9_-.\@]+`.
         * 
         * @return builder
         * 
         */
        public Builder name(String name) {
            return name(Output.of(name));
        }

        /**
         * @param password The password for the user account. A password is required if you are using Amazon Connect for identity management. Otherwise, it is an error to include a password.
         * 
         * @return builder
         * 
         */
        public Builder password(@Nullable Output<String> password) {
            $.password = password;
            return this;
        }

        /**
         * @param password The password for the user account. A password is required if you are using Amazon Connect for identity management. Otherwise, it is an error to include a password.
         * 
         * @return builder
         * 
         */
        public Builder password(String password) {
            return password(Output.of(password));
        }

        /**
         * @param phoneConfig A block that contains information about the phone settings for the user. Documented below.
         * 
         * @return builder
         * 
         */
        public Builder phoneConfig(@Nullable Output<UserPhoneConfigArgs> phoneConfig) {
            $.phoneConfig = phoneConfig;
            return this;
        }

        /**
         * @param phoneConfig A block that contains information about the phone settings for the user. Documented below.
         * 
         * @return builder
         * 
         */
        public Builder phoneConfig(UserPhoneConfigArgs phoneConfig) {
            return phoneConfig(Output.of(phoneConfig));
        }

        /**
         * @param routingProfileId The identifier of the routing profile for the user.
         * 
         * @return builder
         * 
         */
        public Builder routingProfileId(@Nullable Output<String> routingProfileId) {
            $.routingProfileId = routingProfileId;
            return this;
        }

        /**
         * @param routingProfileId The identifier of the routing profile for the user.
         * 
         * @return builder
         * 
         */
        public Builder routingProfileId(String routingProfileId) {
            return routingProfileId(Output.of(routingProfileId));
        }

        /**
         * @param securityProfileIds A list of identifiers for the security profiles for the user. Specify a minimum of 1 and maximum of 10 security profile ids. For more information, see [Best Practices for Security Profiles](https://docs.aws.amazon.com/connect/latest/adminguide/security-profile-best-practices.html) in the Amazon Connect Administrator Guide.
         * 
         * @return builder
         * 
         */
        public Builder securityProfileIds(@Nullable Output<List<String>> securityProfileIds) {
            $.securityProfileIds = securityProfileIds;
            return this;
        }

        /**
         * @param securityProfileIds A list of identifiers for the security profiles for the user. Specify a minimum of 1 and maximum of 10 security profile ids. For more information, see [Best Practices for Security Profiles](https://docs.aws.amazon.com/connect/latest/adminguide/security-profile-best-practices.html) in the Amazon Connect Administrator Guide.
         * 
         * @return builder
         * 
         */
        public Builder securityProfileIds(List<String> securityProfileIds) {
            return securityProfileIds(Output.of(securityProfileIds));
        }

        /**
         * @param securityProfileIds A list of identifiers for the security profiles for the user. Specify a minimum of 1 and maximum of 10 security profile ids. For more information, see [Best Practices for Security Profiles](https://docs.aws.amazon.com/connect/latest/adminguide/security-profile-best-practices.html) in the Amazon Connect Administrator Guide.
         * 
         * @return builder
         * 
         */
        public Builder securityProfileIds(String... securityProfileIds) {
            return securityProfileIds(List.of(securityProfileIds));
        }

        /**
         * @param tags Tags to apply to the user. 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 Tags to apply to the user. 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 A 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 A 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 userId The identifier for the user.
         * 
         * @return builder
         * 
         */
        public Builder userId(@Nullable Output<String> userId) {
            $.userId = userId;
            return this;
        }

        /**
         * @param userId The identifier for the user.
         * 
         * @return builder
         * 
         */
        public Builder userId(String userId) {
            return userId(Output.of(userId));
        }

        public UserState build() {
            return $;
        }
    }

}
