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

import com.pulumi.core.Output;
import com.pulumi.core.annotations.Import;
import com.pulumi.gcp.identityplatform.inputs.ConfigBlockingFunctionsArgs;
import com.pulumi.gcp.identityplatform.inputs.ConfigQuotaArgs;
import java.lang.Boolean;
import java.lang.String;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import javax.annotation.Nullable;


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

    public static final ConfigArgs Empty = new ConfigArgs();

    /**
     * List of domains authorized for OAuth redirects.
     * 
     */
    @Import(name="authorizedDomains")
    private @Nullable Output<List<String>> authorizedDomains;

    /**
     * @return List of domains authorized for OAuth redirects.
     * 
     */
    public Optional<Output<List<String>>> authorizedDomains() {
        return Optional.ofNullable(this.authorizedDomains);
    }

    /**
     * Whether anonymous users will be auto-deleted after a period of 30 days
     * 
     */
    @Import(name="autodeleteAnonymousUsers")
    private @Nullable Output<Boolean> autodeleteAnonymousUsers;

    /**
     * @return Whether anonymous users will be auto-deleted after a period of 30 days
     * 
     */
    public Optional<Output<Boolean>> autodeleteAnonymousUsers() {
        return Optional.ofNullable(this.autodeleteAnonymousUsers);
    }

    /**
     * Configuration related to blocking functions.
     * Structure is documented below.
     * 
     */
    @Import(name="blockingFunctions")
    private @Nullable Output<ConfigBlockingFunctionsArgs> blockingFunctions;

    /**
     * @return Configuration related to blocking functions.
     * Structure is documented below.
     * 
     */
    public Optional<Output<ConfigBlockingFunctionsArgs>> blockingFunctions() {
        return Optional.ofNullable(this.blockingFunctions);
    }

    /**
     * The ID of the project in which the resource belongs.
     * If it is not provided, the provider project is used.
     * 
     */
    @Import(name="project")
    private @Nullable Output<String> project;

    /**
     * @return The ID of the project in which the resource belongs.
     * If it is not provided, the provider project is used.
     * 
     */
    public Optional<Output<String>> project() {
        return Optional.ofNullable(this.project);
    }

    /**
     * Configuration related to quotas.
     * Structure is documented below.
     * 
     */
    @Import(name="quota")
    private @Nullable Output<ConfigQuotaArgs> quota;

    /**
     * @return Configuration related to quotas.
     * Structure is documented below.
     * 
     */
    public Optional<Output<ConfigQuotaArgs>> quota() {
        return Optional.ofNullable(this.quota);
    }

    private ConfigArgs() {}

    private ConfigArgs(ConfigArgs $) {
        this.authorizedDomains = $.authorizedDomains;
        this.autodeleteAnonymousUsers = $.autodeleteAnonymousUsers;
        this.blockingFunctions = $.blockingFunctions;
        this.project = $.project;
        this.quota = $.quota;
    }

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

    public static final class Builder {
        private ConfigArgs $;

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

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

        /**
         * @param authorizedDomains List of domains authorized for OAuth redirects.
         * 
         * @return builder
         * 
         */
        public Builder authorizedDomains(@Nullable Output<List<String>> authorizedDomains) {
            $.authorizedDomains = authorizedDomains;
            return this;
        }

        /**
         * @param authorizedDomains List of domains authorized for OAuth redirects.
         * 
         * @return builder
         * 
         */
        public Builder authorizedDomains(List<String> authorizedDomains) {
            return authorizedDomains(Output.of(authorizedDomains));
        }

        /**
         * @param authorizedDomains List of domains authorized for OAuth redirects.
         * 
         * @return builder
         * 
         */
        public Builder authorizedDomains(String... authorizedDomains) {
            return authorizedDomains(List.of(authorizedDomains));
        }

        /**
         * @param autodeleteAnonymousUsers Whether anonymous users will be auto-deleted after a period of 30 days
         * 
         * @return builder
         * 
         */
        public Builder autodeleteAnonymousUsers(@Nullable Output<Boolean> autodeleteAnonymousUsers) {
            $.autodeleteAnonymousUsers = autodeleteAnonymousUsers;
            return this;
        }

        /**
         * @param autodeleteAnonymousUsers Whether anonymous users will be auto-deleted after a period of 30 days
         * 
         * @return builder
         * 
         */
        public Builder autodeleteAnonymousUsers(Boolean autodeleteAnonymousUsers) {
            return autodeleteAnonymousUsers(Output.of(autodeleteAnonymousUsers));
        }

        /**
         * @param blockingFunctions Configuration related to blocking functions.
         * Structure is documented below.
         * 
         * @return builder
         * 
         */
        public Builder blockingFunctions(@Nullable Output<ConfigBlockingFunctionsArgs> blockingFunctions) {
            $.blockingFunctions = blockingFunctions;
            return this;
        }

        /**
         * @param blockingFunctions Configuration related to blocking functions.
         * Structure is documented below.
         * 
         * @return builder
         * 
         */
        public Builder blockingFunctions(ConfigBlockingFunctionsArgs blockingFunctions) {
            return blockingFunctions(Output.of(blockingFunctions));
        }

        /**
         * @param project The ID of the project in which the resource belongs.
         * If it is not provided, the provider project is used.
         * 
         * @return builder
         * 
         */
        public Builder project(@Nullable Output<String> project) {
            $.project = project;
            return this;
        }

        /**
         * @param project The ID of the project in which the resource belongs.
         * If it is not provided, the provider project is used.
         * 
         * @return builder
         * 
         */
        public Builder project(String project) {
            return project(Output.of(project));
        }

        /**
         * @param quota Configuration related to quotas.
         * Structure is documented below.
         * 
         * @return builder
         * 
         */
        public Builder quota(@Nullable Output<ConfigQuotaArgs> quota) {
            $.quota = quota;
            return this;
        }

        /**
         * @param quota Configuration related to quotas.
         * Structure is documented below.
         * 
         * @return builder
         * 
         */
        public Builder quota(ConfigQuotaArgs quota) {
            return quota(Output.of(quota));
        }

        public ConfigArgs build() {
            return $;
        }
    }

}
