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

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 CxIntentParameterArgs extends com.pulumi.resources.ResourceArgs {

    public static final CxIntentParameterArgs Empty = new CxIntentParameterArgs();

    /**
     * The entity type of the parameter.
     * Format: projects/-/locations/-/agents/-/entityTypes/&lt;System Entity Type ID&gt; for system entity types (for example, projects/-/locations/-/agents/-/entityTypes/sys.date), or projects/&lt;Project ID&gt;/locations/&lt;Location ID&gt;/agents/&lt;Agent ID&gt;/entityTypes/&lt;Entity Type ID&gt; for developer entity types.
     * 
     */
    @Import(name="entityType", required=true)
    private Output<String> entityType;

    /**
     * @return The entity type of the parameter.
     * Format: projects/-/locations/-/agents/-/entityTypes/&lt;System Entity Type ID&gt; for system entity types (for example, projects/-/locations/-/agents/-/entityTypes/sys.date), or projects/&lt;Project ID&gt;/locations/&lt;Location ID&gt;/agents/&lt;Agent ID&gt;/entityTypes/&lt;Entity Type ID&gt; for developer entity types.
     * 
     */
    public Output<String> entityType() {
        return this.entityType;
    }

    /**
     * The unique identifier of the parameter. This field is used by training phrases to annotate their parts.
     * 
     */
    @Import(name="id", required=true)
    private Output<String> id;

    /**
     * @return The unique identifier of the parameter. This field is used by training phrases to annotate their parts.
     * 
     */
    public Output<String> id() {
        return this.id;
    }

    /**
     * Indicates whether the parameter represents a list of values.
     * 
     */
    @Import(name="isList")
    private @Nullable Output<Boolean> isList;

    /**
     * @return Indicates whether the parameter represents a list of values.
     * 
     */
    public Optional<Output<Boolean>> isList() {
        return Optional.ofNullable(this.isList);
    }

    /**
     * Indicates whether the parameter content should be redacted in log. If redaction is enabled, the parameter content will be replaced by parameter name during logging.
     * Note: the parameter content is subject to redaction if either parameter level redaction or entity type level redaction is enabled.
     * 
     */
    @Import(name="redact")
    private @Nullable Output<Boolean> redact;

    /**
     * @return Indicates whether the parameter content should be redacted in log. If redaction is enabled, the parameter content will be replaced by parameter name during logging.
     * Note: the parameter content is subject to redaction if either parameter level redaction or entity type level redaction is enabled.
     * 
     */
    public Optional<Output<Boolean>> redact() {
        return Optional.ofNullable(this.redact);
    }

    private CxIntentParameterArgs() {}

    private CxIntentParameterArgs(CxIntentParameterArgs $) {
        this.entityType = $.entityType;
        this.id = $.id;
        this.isList = $.isList;
        this.redact = $.redact;
    }

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

    public static final class Builder {
        private CxIntentParameterArgs $;

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

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

        /**
         * @param entityType The entity type of the parameter.
         * Format: projects/-/locations/-/agents/-/entityTypes/&lt;System Entity Type ID&gt; for system entity types (for example, projects/-/locations/-/agents/-/entityTypes/sys.date), or projects/&lt;Project ID&gt;/locations/&lt;Location ID&gt;/agents/&lt;Agent ID&gt;/entityTypes/&lt;Entity Type ID&gt; for developer entity types.
         * 
         * @return builder
         * 
         */
        public Builder entityType(Output<String> entityType) {
            $.entityType = entityType;
            return this;
        }

        /**
         * @param entityType The entity type of the parameter.
         * Format: projects/-/locations/-/agents/-/entityTypes/&lt;System Entity Type ID&gt; for system entity types (for example, projects/-/locations/-/agents/-/entityTypes/sys.date), or projects/&lt;Project ID&gt;/locations/&lt;Location ID&gt;/agents/&lt;Agent ID&gt;/entityTypes/&lt;Entity Type ID&gt; for developer entity types.
         * 
         * @return builder
         * 
         */
        public Builder entityType(String entityType) {
            return entityType(Output.of(entityType));
        }

        /**
         * @param id The unique identifier of the parameter. This field is used by training phrases to annotate their parts.
         * 
         * @return builder
         * 
         */
        public Builder id(Output<String> id) {
            $.id = id;
            return this;
        }

        /**
         * @param id The unique identifier of the parameter. This field is used by training phrases to annotate their parts.
         * 
         * @return builder
         * 
         */
        public Builder id(String id) {
            return id(Output.of(id));
        }

        /**
         * @param isList Indicates whether the parameter represents a list of values.
         * 
         * @return builder
         * 
         */
        public Builder isList(@Nullable Output<Boolean> isList) {
            $.isList = isList;
            return this;
        }

        /**
         * @param isList Indicates whether the parameter represents a list of values.
         * 
         * @return builder
         * 
         */
        public Builder isList(Boolean isList) {
            return isList(Output.of(isList));
        }

        /**
         * @param redact Indicates whether the parameter content should be redacted in log. If redaction is enabled, the parameter content will be replaced by parameter name during logging.
         * Note: the parameter content is subject to redaction if either parameter level redaction or entity type level redaction is enabled.
         * 
         * @return builder
         * 
         */
        public Builder redact(@Nullable Output<Boolean> redact) {
            $.redact = redact;
            return this;
        }

        /**
         * @param redact Indicates whether the parameter content should be redacted in log. If redaction is enabled, the parameter content will be replaced by parameter name during logging.
         * Note: the parameter content is subject to redaction if either parameter level redaction or entity type level redaction is enabled.
         * 
         * @return builder
         * 
         */
        public Builder redact(Boolean redact) {
            return redact(Output.of(redact));
        }

        public CxIntentParameterArgs build() {
            $.entityType = Objects.requireNonNull($.entityType, "expected parameter 'entityType' to be non-null");
            $.id = Objects.requireNonNull($.id, "expected parameter 'id' to be non-null");
            return $;
        }
    }

}
