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

import com.pulumi.aws.athena.inputs.WorkgroupConfigurationEngineVersionArgs;
import com.pulumi.aws.athena.inputs.WorkgroupConfigurationResultConfigurationArgs;
import com.pulumi.core.Output;
import com.pulumi.core.annotations.Import;
import java.lang.Boolean;
import java.lang.Integer;
import java.lang.String;
import java.util.Objects;
import java.util.Optional;
import javax.annotation.Nullable;


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

    public static final WorkgroupConfigurationArgs Empty = new WorkgroupConfigurationArgs();

    /**
     * Integer for the upper data usage limit (cutoff) for the amount of bytes a single query in a workgroup is allowed to scan. Must be at least `10485760`.
     * 
     */
    @Import(name="bytesScannedCutoffPerQuery")
    private @Nullable Output<Integer> bytesScannedCutoffPerQuery;

    /**
     * @return Integer for the upper data usage limit (cutoff) for the amount of bytes a single query in a workgroup is allowed to scan. Must be at least `10485760`.
     * 
     */
    public Optional<Output<Integer>> bytesScannedCutoffPerQuery() {
        return Optional.ofNullable(this.bytesScannedCutoffPerQuery);
    }

    /**
     * Boolean whether the settings for the workgroup override client-side settings. For more information, see [Workgroup Settings Override Client-Side Settings](https://docs.aws.amazon.com/athena/latest/ug/workgroups-settings-override.html). Defaults to `true`.
     * 
     */
    @Import(name="enforceWorkgroupConfiguration")
    private @Nullable Output<Boolean> enforceWorkgroupConfiguration;

    /**
     * @return Boolean whether the settings for the workgroup override client-side settings. For more information, see [Workgroup Settings Override Client-Side Settings](https://docs.aws.amazon.com/athena/latest/ug/workgroups-settings-override.html). Defaults to `true`.
     * 
     */
    public Optional<Output<Boolean>> enforceWorkgroupConfiguration() {
        return Optional.ofNullable(this.enforceWorkgroupConfiguration);
    }

    /**
     * Configuration block for the Athena Engine Versioning. For more information, see [Athena Engine Versioning](https://docs.aws.amazon.com/athena/latest/ug/engine-versions.html). See Engine Version below.
     * 
     */
    @Import(name="engineVersion")
    private @Nullable Output<WorkgroupConfigurationEngineVersionArgs> engineVersion;

    /**
     * @return Configuration block for the Athena Engine Versioning. For more information, see [Athena Engine Versioning](https://docs.aws.amazon.com/athena/latest/ug/engine-versions.html). See Engine Version below.
     * 
     */
    public Optional<Output<WorkgroupConfigurationEngineVersionArgs>> engineVersion() {
        return Optional.ofNullable(this.engineVersion);
    }

    /**
     * Role used in a notebook session for accessing the user&#39;s resources.
     * 
     */
    @Import(name="executionRole")
    private @Nullable Output<String> executionRole;

    /**
     * @return Role used in a notebook session for accessing the user&#39;s resources.
     * 
     */
    public Optional<Output<String>> executionRole() {
        return Optional.ofNullable(this.executionRole);
    }

    /**
     * Boolean whether Amazon CloudWatch metrics are enabled for the workgroup. Defaults to `true`.
     * 
     */
    @Import(name="publishCloudwatchMetricsEnabled")
    private @Nullable Output<Boolean> publishCloudwatchMetricsEnabled;

    /**
     * @return Boolean whether Amazon CloudWatch metrics are enabled for the workgroup. Defaults to `true`.
     * 
     */
    public Optional<Output<Boolean>> publishCloudwatchMetricsEnabled() {
        return Optional.ofNullable(this.publishCloudwatchMetricsEnabled);
    }

    /**
     * If set to true , allows members assigned to a workgroup to reference Amazon S3 Requester Pays buckets in queries. If set to false , workgroup members cannot query data from Requester Pays buckets, and queries that retrieve data from Requester Pays buckets cause an error. The default is false . For more information about Requester Pays buckets, see [Requester Pays Buckets](https://docs.aws.amazon.com/AmazonS3/latest/dev/RequesterPaysBuckets.html) in the Amazon Simple Storage Service Developer Guide.
     * 
     */
    @Import(name="requesterPaysEnabled")
    private @Nullable Output<Boolean> requesterPaysEnabled;

    /**
     * @return If set to true , allows members assigned to a workgroup to reference Amazon S3 Requester Pays buckets in queries. If set to false , workgroup members cannot query data from Requester Pays buckets, and queries that retrieve data from Requester Pays buckets cause an error. The default is false . For more information about Requester Pays buckets, see [Requester Pays Buckets](https://docs.aws.amazon.com/AmazonS3/latest/dev/RequesterPaysBuckets.html) in the Amazon Simple Storage Service Developer Guide.
     * 
     */
    public Optional<Output<Boolean>> requesterPaysEnabled() {
        return Optional.ofNullable(this.requesterPaysEnabled);
    }

    /**
     * Configuration block with result settings. See Result Configuration below.
     * 
     */
    @Import(name="resultConfiguration")
    private @Nullable Output<WorkgroupConfigurationResultConfigurationArgs> resultConfiguration;

    /**
     * @return Configuration block with result settings. See Result Configuration below.
     * 
     */
    public Optional<Output<WorkgroupConfigurationResultConfigurationArgs>> resultConfiguration() {
        return Optional.ofNullable(this.resultConfiguration);
    }

    private WorkgroupConfigurationArgs() {}

    private WorkgroupConfigurationArgs(WorkgroupConfigurationArgs $) {
        this.bytesScannedCutoffPerQuery = $.bytesScannedCutoffPerQuery;
        this.enforceWorkgroupConfiguration = $.enforceWorkgroupConfiguration;
        this.engineVersion = $.engineVersion;
        this.executionRole = $.executionRole;
        this.publishCloudwatchMetricsEnabled = $.publishCloudwatchMetricsEnabled;
        this.requesterPaysEnabled = $.requesterPaysEnabled;
        this.resultConfiguration = $.resultConfiguration;
    }

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

    public static final class Builder {
        private WorkgroupConfigurationArgs $;

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

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

        /**
         * @param bytesScannedCutoffPerQuery Integer for the upper data usage limit (cutoff) for the amount of bytes a single query in a workgroup is allowed to scan. Must be at least `10485760`.
         * 
         * @return builder
         * 
         */
        public Builder bytesScannedCutoffPerQuery(@Nullable Output<Integer> bytesScannedCutoffPerQuery) {
            $.bytesScannedCutoffPerQuery = bytesScannedCutoffPerQuery;
            return this;
        }

        /**
         * @param bytesScannedCutoffPerQuery Integer for the upper data usage limit (cutoff) for the amount of bytes a single query in a workgroup is allowed to scan. Must be at least `10485760`.
         * 
         * @return builder
         * 
         */
        public Builder bytesScannedCutoffPerQuery(Integer bytesScannedCutoffPerQuery) {
            return bytesScannedCutoffPerQuery(Output.of(bytesScannedCutoffPerQuery));
        }

        /**
         * @param enforceWorkgroupConfiguration Boolean whether the settings for the workgroup override client-side settings. For more information, see [Workgroup Settings Override Client-Side Settings](https://docs.aws.amazon.com/athena/latest/ug/workgroups-settings-override.html). Defaults to `true`.
         * 
         * @return builder
         * 
         */
        public Builder enforceWorkgroupConfiguration(@Nullable Output<Boolean> enforceWorkgroupConfiguration) {
            $.enforceWorkgroupConfiguration = enforceWorkgroupConfiguration;
            return this;
        }

        /**
         * @param enforceWorkgroupConfiguration Boolean whether the settings for the workgroup override client-side settings. For more information, see [Workgroup Settings Override Client-Side Settings](https://docs.aws.amazon.com/athena/latest/ug/workgroups-settings-override.html). Defaults to `true`.
         * 
         * @return builder
         * 
         */
        public Builder enforceWorkgroupConfiguration(Boolean enforceWorkgroupConfiguration) {
            return enforceWorkgroupConfiguration(Output.of(enforceWorkgroupConfiguration));
        }

        /**
         * @param engineVersion Configuration block for the Athena Engine Versioning. For more information, see [Athena Engine Versioning](https://docs.aws.amazon.com/athena/latest/ug/engine-versions.html). See Engine Version below.
         * 
         * @return builder
         * 
         */
        public Builder engineVersion(@Nullable Output<WorkgroupConfigurationEngineVersionArgs> engineVersion) {
            $.engineVersion = engineVersion;
            return this;
        }

        /**
         * @param engineVersion Configuration block for the Athena Engine Versioning. For more information, see [Athena Engine Versioning](https://docs.aws.amazon.com/athena/latest/ug/engine-versions.html). See Engine Version below.
         * 
         * @return builder
         * 
         */
        public Builder engineVersion(WorkgroupConfigurationEngineVersionArgs engineVersion) {
            return engineVersion(Output.of(engineVersion));
        }

        /**
         * @param executionRole Role used in a notebook session for accessing the user&#39;s resources.
         * 
         * @return builder
         * 
         */
        public Builder executionRole(@Nullable Output<String> executionRole) {
            $.executionRole = executionRole;
            return this;
        }

        /**
         * @param executionRole Role used in a notebook session for accessing the user&#39;s resources.
         * 
         * @return builder
         * 
         */
        public Builder executionRole(String executionRole) {
            return executionRole(Output.of(executionRole));
        }

        /**
         * @param publishCloudwatchMetricsEnabled Boolean whether Amazon CloudWatch metrics are enabled for the workgroup. Defaults to `true`.
         * 
         * @return builder
         * 
         */
        public Builder publishCloudwatchMetricsEnabled(@Nullable Output<Boolean> publishCloudwatchMetricsEnabled) {
            $.publishCloudwatchMetricsEnabled = publishCloudwatchMetricsEnabled;
            return this;
        }

        /**
         * @param publishCloudwatchMetricsEnabled Boolean whether Amazon CloudWatch metrics are enabled for the workgroup. Defaults to `true`.
         * 
         * @return builder
         * 
         */
        public Builder publishCloudwatchMetricsEnabled(Boolean publishCloudwatchMetricsEnabled) {
            return publishCloudwatchMetricsEnabled(Output.of(publishCloudwatchMetricsEnabled));
        }

        /**
         * @param requesterPaysEnabled If set to true , allows members assigned to a workgroup to reference Amazon S3 Requester Pays buckets in queries. If set to false , workgroup members cannot query data from Requester Pays buckets, and queries that retrieve data from Requester Pays buckets cause an error. The default is false . For more information about Requester Pays buckets, see [Requester Pays Buckets](https://docs.aws.amazon.com/AmazonS3/latest/dev/RequesterPaysBuckets.html) in the Amazon Simple Storage Service Developer Guide.
         * 
         * @return builder
         * 
         */
        public Builder requesterPaysEnabled(@Nullable Output<Boolean> requesterPaysEnabled) {
            $.requesterPaysEnabled = requesterPaysEnabled;
            return this;
        }

        /**
         * @param requesterPaysEnabled If set to true , allows members assigned to a workgroup to reference Amazon S3 Requester Pays buckets in queries. If set to false , workgroup members cannot query data from Requester Pays buckets, and queries that retrieve data from Requester Pays buckets cause an error. The default is false . For more information about Requester Pays buckets, see [Requester Pays Buckets](https://docs.aws.amazon.com/AmazonS3/latest/dev/RequesterPaysBuckets.html) in the Amazon Simple Storage Service Developer Guide.
         * 
         * @return builder
         * 
         */
        public Builder requesterPaysEnabled(Boolean requesterPaysEnabled) {
            return requesterPaysEnabled(Output.of(requesterPaysEnabled));
        }

        /**
         * @param resultConfiguration Configuration block with result settings. See Result Configuration below.
         * 
         * @return builder
         * 
         */
        public Builder resultConfiguration(@Nullable Output<WorkgroupConfigurationResultConfigurationArgs> resultConfiguration) {
            $.resultConfiguration = resultConfiguration;
            return this;
        }

        /**
         * @param resultConfiguration Configuration block with result settings. See Result Configuration below.
         * 
         * @return builder
         * 
         */
        public Builder resultConfiguration(WorkgroupConfigurationResultConfigurationArgs resultConfiguration) {
            return resultConfiguration(Output.of(resultConfiguration));
        }

        public WorkgroupConfigurationArgs build() {
            return $;
        }
    }

}
