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

import com.pulumi.core.Output;
import com.pulumi.core.annotations.Import;
import java.lang.Boolean;
import java.lang.String;
import java.util.Objects;
import java.util.Optional;
import javax.annotation.Nullable;


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

    public static final UserStackAssociationArgs Empty = new UserStackAssociationArgs();

    /**
     * Authentication type for the user.
     * 
     */
    @Import(name="authenticationType", required=true)
    private Output<String> authenticationType;

    /**
     * @return Authentication type for the user.
     * 
     */
    public Output<String> authenticationType() {
        return this.authenticationType;
    }

    /**
     * Whether a welcome email is sent to a user after the user is created in the user pool.
     * 
     */
    @Import(name="sendEmailNotification")
    private @Nullable Output<Boolean> sendEmailNotification;

    /**
     * @return Whether a welcome email is sent to a user after the user is created in the user pool.
     * 
     */
    public Optional<Output<Boolean>> sendEmailNotification() {
        return Optional.ofNullable(this.sendEmailNotification);
    }

    /**
     * Name of the stack that is associated with the user.
     * 
     */
    @Import(name="stackName", required=true)
    private Output<String> stackName;

    /**
     * @return Name of the stack that is associated with the user.
     * 
     */
    public Output<String> stackName() {
        return this.stackName;
    }

    /**
     * Email address of the user who is associated with the stack.
     * 
     * The following arguments are optional:
     * 
     */
    @Import(name="userName", required=true)
    private Output<String> userName;

    /**
     * @return Email address of the user who is associated with the stack.
     * 
     * The following arguments are optional:
     * 
     */
    public Output<String> userName() {
        return this.userName;
    }

    private UserStackAssociationArgs() {}

    private UserStackAssociationArgs(UserStackAssociationArgs $) {
        this.authenticationType = $.authenticationType;
        this.sendEmailNotification = $.sendEmailNotification;
        this.stackName = $.stackName;
        this.userName = $.userName;
    }

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

    public static final class Builder {
        private UserStackAssociationArgs $;

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

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

        /**
         * @param authenticationType Authentication type for the user.
         * 
         * @return builder
         * 
         */
        public Builder authenticationType(Output<String> authenticationType) {
            $.authenticationType = authenticationType;
            return this;
        }

        /**
         * @param authenticationType Authentication type for the user.
         * 
         * @return builder
         * 
         */
        public Builder authenticationType(String authenticationType) {
            return authenticationType(Output.of(authenticationType));
        }

        /**
         * @param sendEmailNotification Whether a welcome email is sent to a user after the user is created in the user pool.
         * 
         * @return builder
         * 
         */
        public Builder sendEmailNotification(@Nullable Output<Boolean> sendEmailNotification) {
            $.sendEmailNotification = sendEmailNotification;
            return this;
        }

        /**
         * @param sendEmailNotification Whether a welcome email is sent to a user after the user is created in the user pool.
         * 
         * @return builder
         * 
         */
        public Builder sendEmailNotification(Boolean sendEmailNotification) {
            return sendEmailNotification(Output.of(sendEmailNotification));
        }

        /**
         * @param stackName Name of the stack that is associated with the user.
         * 
         * @return builder
         * 
         */
        public Builder stackName(Output<String> stackName) {
            $.stackName = stackName;
            return this;
        }

        /**
         * @param stackName Name of the stack that is associated with the user.
         * 
         * @return builder
         * 
         */
        public Builder stackName(String stackName) {
            return stackName(Output.of(stackName));
        }

        /**
         * @param userName Email address of the user who is associated with the stack.
         * 
         * The following arguments are optional:
         * 
         * @return builder
         * 
         */
        public Builder userName(Output<String> userName) {
            $.userName = userName;
            return this;
        }

        /**
         * @param userName Email address of the user who is associated with the stack.
         * 
         * The following arguments are optional:
         * 
         * @return builder
         * 
         */
        public Builder userName(String userName) {
            return userName(Output.of(userName));
        }

        public UserStackAssociationArgs build() {
            $.authenticationType = Objects.requireNonNull($.authenticationType, "expected parameter 'authenticationType' to be non-null");
            $.stackName = Objects.requireNonNull($.stackName, "expected parameter 'stackName' to be non-null");
            $.userName = Objects.requireNonNull($.userName, "expected parameter 'userName' to be non-null");
            return $;
        }
    }

}
