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

import com.pulumi.core.Output;
import com.pulumi.core.annotations.Import;
import com.pulumi.gcp.dataloss.inputs.PreventionDeidentifyTemplateDeidentifyConfigArgs;
import java.lang.String;
import java.util.Objects;
import java.util.Optional;
import javax.annotation.Nullable;


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

    public static final PreventionDeidentifyTemplateArgs Empty = new PreventionDeidentifyTemplateArgs();

    /**
     * Configuration of the deidentify template
     * Structure is documented below.
     * 
     */
    @Import(name="deidentifyConfig", required=true)
    private Output<PreventionDeidentifyTemplateDeidentifyConfigArgs> deidentifyConfig;

    /**
     * @return Configuration of the deidentify template
     * Structure is documented below.
     * 
     */
    public Output<PreventionDeidentifyTemplateDeidentifyConfigArgs> deidentifyConfig() {
        return this.deidentifyConfig;
    }

    /**
     * A description of the template.
     * 
     */
    @Import(name="description")
    private @Nullable Output<String> description;

    /**
     * @return A description of the template.
     * 
     */
    public Optional<Output<String>> description() {
        return Optional.ofNullable(this.description);
    }

    /**
     * User set display name of the template.
     * 
     */
    @Import(name="displayName")
    private @Nullable Output<String> displayName;

    /**
     * @return User set display name of the template.
     * 
     */
    public Optional<Output<String>> displayName() {
        return Optional.ofNullable(this.displayName);
    }

    /**
     * The parent of the template in any of the following formats:
     * * `projects/{{project}}`
     * * `projects/{{project}}/locations/{{location}}`
     * * `organizations/{{organization_id}}`
     * * `organizations/{{organization_id}}/locations/{{location}}`
     * 
     */
    @Import(name="parent", required=true)
    private Output<String> parent;

    /**
     * @return The parent of the template in any of the following formats:
     * * `projects/{{project}}`
     * * `projects/{{project}}/locations/{{location}}`
     * * `organizations/{{organization_id}}`
     * * `organizations/{{organization_id}}/locations/{{location}}`
     * 
     */
    public Output<String> parent() {
        return this.parent;
    }

    /**
     * The template id can contain uppercase and lowercase letters, numbers, and hyphens;
     * that is, it must match the regular expression: [a-zA-Z\d-_]+. The maximum length is
     * 100 characters. Can be empty to allow the system to generate one.
     * 
     */
    @Import(name="templateId")
    private @Nullable Output<String> templateId;

    /**
     * @return The template id can contain uppercase and lowercase letters, numbers, and hyphens;
     * that is, it must match the regular expression: [a-zA-Z\d-_]+. The maximum length is
     * 100 characters. Can be empty to allow the system to generate one.
     * 
     */
    public Optional<Output<String>> templateId() {
        return Optional.ofNullable(this.templateId);
    }

    private PreventionDeidentifyTemplateArgs() {}

    private PreventionDeidentifyTemplateArgs(PreventionDeidentifyTemplateArgs $) {
        this.deidentifyConfig = $.deidentifyConfig;
        this.description = $.description;
        this.displayName = $.displayName;
        this.parent = $.parent;
        this.templateId = $.templateId;
    }

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

    public static final class Builder {
        private PreventionDeidentifyTemplateArgs $;

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

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

        /**
         * @param deidentifyConfig Configuration of the deidentify template
         * Structure is documented below.
         * 
         * @return builder
         * 
         */
        public Builder deidentifyConfig(Output<PreventionDeidentifyTemplateDeidentifyConfigArgs> deidentifyConfig) {
            $.deidentifyConfig = deidentifyConfig;
            return this;
        }

        /**
         * @param deidentifyConfig Configuration of the deidentify template
         * Structure is documented below.
         * 
         * @return builder
         * 
         */
        public Builder deidentifyConfig(PreventionDeidentifyTemplateDeidentifyConfigArgs deidentifyConfig) {
            return deidentifyConfig(Output.of(deidentifyConfig));
        }

        /**
         * @param description A description of the template.
         * 
         * @return builder
         * 
         */
        public Builder description(@Nullable Output<String> description) {
            $.description = description;
            return this;
        }

        /**
         * @param description A description of the template.
         * 
         * @return builder
         * 
         */
        public Builder description(String description) {
            return description(Output.of(description));
        }

        /**
         * @param displayName User set display name of the template.
         * 
         * @return builder
         * 
         */
        public Builder displayName(@Nullable Output<String> displayName) {
            $.displayName = displayName;
            return this;
        }

        /**
         * @param displayName User set display name of the template.
         * 
         * @return builder
         * 
         */
        public Builder displayName(String displayName) {
            return displayName(Output.of(displayName));
        }

        /**
         * @param parent The parent of the template in any of the following formats:
         * * `projects/{{project}}`
         * * `projects/{{project}}/locations/{{location}}`
         * * `organizations/{{organization_id}}`
         * * `organizations/{{organization_id}}/locations/{{location}}`
         * 
         * @return builder
         * 
         */
        public Builder parent(Output<String> parent) {
            $.parent = parent;
            return this;
        }

        /**
         * @param parent The parent of the template in any of the following formats:
         * * `projects/{{project}}`
         * * `projects/{{project}}/locations/{{location}}`
         * * `organizations/{{organization_id}}`
         * * `organizations/{{organization_id}}/locations/{{location}}`
         * 
         * @return builder
         * 
         */
        public Builder parent(String parent) {
            return parent(Output.of(parent));
        }

        /**
         * @param templateId The template id can contain uppercase and lowercase letters, numbers, and hyphens;
         * that is, it must match the regular expression: [a-zA-Z\d-_]+. The maximum length is
         * 100 characters. Can be empty to allow the system to generate one.
         * 
         * @return builder
         * 
         */
        public Builder templateId(@Nullable Output<String> templateId) {
            $.templateId = templateId;
            return this;
        }

        /**
         * @param templateId The template id can contain uppercase and lowercase letters, numbers, and hyphens;
         * that is, it must match the regular expression: [a-zA-Z\d-_]+. The maximum length is
         * 100 characters. Can be empty to allow the system to generate one.
         * 
         * @return builder
         * 
         */
        public Builder templateId(String templateId) {
            return templateId(Output.of(templateId));
        }

        public PreventionDeidentifyTemplateArgs build() {
            $.deidentifyConfig = Objects.requireNonNull($.deidentifyConfig, "expected parameter 'deidentifyConfig' to be non-null");
            $.parent = Objects.requireNonNull($.parent, "expected parameter 'parent' to be non-null");
            return $;
        }
    }

}
