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

import com.pulumi.azure.cosmosdb.inputs.CassandraTableAutoscaleSettingsArgs;
import com.pulumi.azure.cosmosdb.inputs.CassandraTableSchemaArgs;
import com.pulumi.core.Output;
import com.pulumi.core.annotations.Import;
import java.lang.Integer;
import java.lang.String;
import java.util.Objects;
import java.util.Optional;
import javax.annotation.Nullable;


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

    public static final CassandraTableState Empty = new CassandraTableState();

    /**
     * Time to live of the Analytical Storage. Possible values are between `-1` and `2147483647` except `0`. `-1` means the Analytical Storage never expires. Changing this forces a new resource to be created.
     * 
     * &gt; **Note:** throughput has a maximum value of `1000000` unless a higher limit is requested via Azure Support
     * 
     */
    @Import(name="analyticalStorageTtl")
    private @Nullable Output<Integer> analyticalStorageTtl;

    /**
     * @return Time to live of the Analytical Storage. Possible values are between `-1` and `2147483647` except `0`. `-1` means the Analytical Storage never expires. Changing this forces a new resource to be created.
     * 
     * &gt; **Note:** throughput has a maximum value of `1000000` unless a higher limit is requested via Azure Support
     * 
     */
    public Optional<Output<Integer>> analyticalStorageTtl() {
        return Optional.ofNullable(this.analyticalStorageTtl);
    }

    @Import(name="autoscaleSettings")
    private @Nullable Output<CassandraTableAutoscaleSettingsArgs> autoscaleSettings;

    public Optional<Output<CassandraTableAutoscaleSettingsArgs>> autoscaleSettings() {
        return Optional.ofNullable(this.autoscaleSettings);
    }

    /**
     * The ID of the Cosmos DB Cassandra Keyspace to create the table within. Changing this forces a new resource to be created.
     * 
     */
    @Import(name="cassandraKeyspaceId")
    private @Nullable Output<String> cassandraKeyspaceId;

    /**
     * @return The ID of the Cosmos DB Cassandra Keyspace to create the table within. Changing this forces a new resource to be created.
     * 
     */
    public Optional<Output<String>> cassandraKeyspaceId() {
        return Optional.ofNullable(this.cassandraKeyspaceId);
    }

    /**
     * Time to live of the Cosmos DB Cassandra table. Possible values are at least `-1`. `-1` means the Cassandra table never expires.
     * 
     */
    @Import(name="defaultTtl")
    private @Nullable Output<Integer> defaultTtl;

    /**
     * @return Time to live of the Cosmos DB Cassandra table. Possible values are at least `-1`. `-1` means the Cassandra table never expires.
     * 
     */
    public Optional<Output<Integer>> defaultTtl() {
        return Optional.ofNullable(this.defaultTtl);
    }

    /**
     * Specifies the name of the Cosmos DB Cassandra Table. Changing this forces a new resource to be created.
     * 
     */
    @Import(name="name")
    private @Nullable Output<String> name;

    /**
     * @return Specifies the name of the Cosmos DB Cassandra Table. Changing this forces a new resource to be created.
     * 
     */
    public Optional<Output<String>> name() {
        return Optional.ofNullable(this.name);
    }

    /**
     * A `schema` block as defined below.
     * 
     */
    @Import(name="schema")
    private @Nullable Output<CassandraTableSchemaArgs> schema;

    /**
     * @return A `schema` block as defined below.
     * 
     */
    public Optional<Output<CassandraTableSchemaArgs>> schema() {
        return Optional.ofNullable(this.schema);
    }

    @Import(name="throughput")
    private @Nullable Output<Integer> throughput;

    public Optional<Output<Integer>> throughput() {
        return Optional.ofNullable(this.throughput);
    }

    private CassandraTableState() {}

    private CassandraTableState(CassandraTableState $) {
        this.analyticalStorageTtl = $.analyticalStorageTtl;
        this.autoscaleSettings = $.autoscaleSettings;
        this.cassandraKeyspaceId = $.cassandraKeyspaceId;
        this.defaultTtl = $.defaultTtl;
        this.name = $.name;
        this.schema = $.schema;
        this.throughput = $.throughput;
    }

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

    public static final class Builder {
        private CassandraTableState $;

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

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

        /**
         * @param analyticalStorageTtl Time to live of the Analytical Storage. Possible values are between `-1` and `2147483647` except `0`. `-1` means the Analytical Storage never expires. Changing this forces a new resource to be created.
         * 
         * &gt; **Note:** throughput has a maximum value of `1000000` unless a higher limit is requested via Azure Support
         * 
         * @return builder
         * 
         */
        public Builder analyticalStorageTtl(@Nullable Output<Integer> analyticalStorageTtl) {
            $.analyticalStorageTtl = analyticalStorageTtl;
            return this;
        }

        /**
         * @param analyticalStorageTtl Time to live of the Analytical Storage. Possible values are between `-1` and `2147483647` except `0`. `-1` means the Analytical Storage never expires. Changing this forces a new resource to be created.
         * 
         * &gt; **Note:** throughput has a maximum value of `1000000` unless a higher limit is requested via Azure Support
         * 
         * @return builder
         * 
         */
        public Builder analyticalStorageTtl(Integer analyticalStorageTtl) {
            return analyticalStorageTtl(Output.of(analyticalStorageTtl));
        }

        public Builder autoscaleSettings(@Nullable Output<CassandraTableAutoscaleSettingsArgs> autoscaleSettings) {
            $.autoscaleSettings = autoscaleSettings;
            return this;
        }

        public Builder autoscaleSettings(CassandraTableAutoscaleSettingsArgs autoscaleSettings) {
            return autoscaleSettings(Output.of(autoscaleSettings));
        }

        /**
         * @param cassandraKeyspaceId The ID of the Cosmos DB Cassandra Keyspace to create the table within. Changing this forces a new resource to be created.
         * 
         * @return builder
         * 
         */
        public Builder cassandraKeyspaceId(@Nullable Output<String> cassandraKeyspaceId) {
            $.cassandraKeyspaceId = cassandraKeyspaceId;
            return this;
        }

        /**
         * @param cassandraKeyspaceId The ID of the Cosmos DB Cassandra Keyspace to create the table within. Changing this forces a new resource to be created.
         * 
         * @return builder
         * 
         */
        public Builder cassandraKeyspaceId(String cassandraKeyspaceId) {
            return cassandraKeyspaceId(Output.of(cassandraKeyspaceId));
        }

        /**
         * @param defaultTtl Time to live of the Cosmos DB Cassandra table. Possible values are at least `-1`. `-1` means the Cassandra table never expires.
         * 
         * @return builder
         * 
         */
        public Builder defaultTtl(@Nullable Output<Integer> defaultTtl) {
            $.defaultTtl = defaultTtl;
            return this;
        }

        /**
         * @param defaultTtl Time to live of the Cosmos DB Cassandra table. Possible values are at least `-1`. `-1` means the Cassandra table never expires.
         * 
         * @return builder
         * 
         */
        public Builder defaultTtl(Integer defaultTtl) {
            return defaultTtl(Output.of(defaultTtl));
        }

        /**
         * @param name Specifies the name of the Cosmos DB Cassandra Table. Changing this forces a new resource to be created.
         * 
         * @return builder
         * 
         */
        public Builder name(@Nullable Output<String> name) {
            $.name = name;
            return this;
        }

        /**
         * @param name Specifies the name of the Cosmos DB Cassandra Table. Changing this forces a new resource to be created.
         * 
         * @return builder
         * 
         */
        public Builder name(String name) {
            return name(Output.of(name));
        }

        /**
         * @param schema A `schema` block as defined below.
         * 
         * @return builder
         * 
         */
        public Builder schema(@Nullable Output<CassandraTableSchemaArgs> schema) {
            $.schema = schema;
            return this;
        }

        /**
         * @param schema A `schema` block as defined below.
         * 
         * @return builder
         * 
         */
        public Builder schema(CassandraTableSchemaArgs schema) {
            return schema(Output.of(schema));
        }

        public Builder throughput(@Nullable Output<Integer> throughput) {
            $.throughput = throughput;
            return this;
        }

        public Builder throughput(Integer throughput) {
            return throughput(Output.of(throughput));
        }

        public CassandraTableState build() {
            return $;
        }
    }

}
