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

import com.pulumi.aws.rds.inputs.ReservedInstanceRecurringChargeArgs;
import com.pulumi.core.Output;
import com.pulumi.core.annotations.Import;
import java.lang.Boolean;
import java.lang.Double;
import java.lang.Integer;
import java.lang.String;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import javax.annotation.Nullable;


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

    public static final ReservedInstanceState Empty = new ReservedInstanceState();

    /**
     * ARN for the reserved DB instance.
     * 
     */
    @Import(name="arn")
    private @Nullable Output<String> arn;

    /**
     * @return ARN for the reserved DB instance.
     * 
     */
    public Optional<Output<String>> arn() {
        return Optional.ofNullable(this.arn);
    }

    /**
     * Currency code for the reserved DB instance.
     * 
     */
    @Import(name="currencyCode")
    private @Nullable Output<String> currencyCode;

    /**
     * @return Currency code for the reserved DB instance.
     * 
     */
    public Optional<Output<String>> currencyCode() {
        return Optional.ofNullable(this.currencyCode);
    }

    /**
     * DB instance class for the reserved DB instance.
     * 
     */
    @Import(name="dbInstanceClass")
    private @Nullable Output<String> dbInstanceClass;

    /**
     * @return DB instance class for the reserved DB instance.
     * 
     */
    public Optional<Output<String>> dbInstanceClass() {
        return Optional.ofNullable(this.dbInstanceClass);
    }

    /**
     * Duration of the reservation in seconds.
     * 
     */
    @Import(name="duration")
    private @Nullable Output<Integer> duration;

    /**
     * @return Duration of the reservation in seconds.
     * 
     */
    public Optional<Output<Integer>> duration() {
        return Optional.ofNullable(this.duration);
    }

    /**
     * Fixed price charged for this reserved DB instance.
     * 
     */
    @Import(name="fixedPrice")
    private @Nullable Output<Double> fixedPrice;

    /**
     * @return Fixed price charged for this reserved DB instance.
     * 
     */
    public Optional<Output<Double>> fixedPrice() {
        return Optional.ofNullable(this.fixedPrice);
    }

    /**
     * Number of instances to reserve. Default value is `1`.
     * 
     */
    @Import(name="instanceCount")
    private @Nullable Output<Integer> instanceCount;

    /**
     * @return Number of instances to reserve. Default value is `1`.
     * 
     */
    public Optional<Output<Integer>> instanceCount() {
        return Optional.ofNullable(this.instanceCount);
    }

    /**
     * Unique identifier for the lease associated with the reserved DB instance. Amazon Web Services Support might request the lease ID for an issue related to a reserved DB instance.
     * 
     */
    @Import(name="leaseId")
    private @Nullable Output<String> leaseId;

    /**
     * @return Unique identifier for the lease associated with the reserved DB instance. Amazon Web Services Support might request the lease ID for an issue related to a reserved DB instance.
     * 
     */
    public Optional<Output<String>> leaseId() {
        return Optional.ofNullable(this.leaseId);
    }

    /**
     * Whether the reservation applies to Multi-AZ deployments.
     * 
     */
    @Import(name="multiAz")
    private @Nullable Output<Boolean> multiAz;

    /**
     * @return Whether the reservation applies to Multi-AZ deployments.
     * 
     */
    public Optional<Output<Boolean>> multiAz() {
        return Optional.ofNullable(this.multiAz);
    }

    /**
     * ID of the Reserved DB instance offering to purchase. To determine an `offering_id`, see the `aws.rds.getReservedInstanceOffering` data source.
     * 
     * The following arguments are optional:
     * 
     */
    @Import(name="offeringId")
    private @Nullable Output<String> offeringId;

    /**
     * @return ID of the Reserved DB instance offering to purchase. To determine an `offering_id`, see the `aws.rds.getReservedInstanceOffering` data source.
     * 
     * The following arguments are optional:
     * 
     */
    public Optional<Output<String>> offeringId() {
        return Optional.ofNullable(this.offeringId);
    }

    /**
     * Offering type of this reserved DB instance.
     * 
     */
    @Import(name="offeringType")
    private @Nullable Output<String> offeringType;

    /**
     * @return Offering type of this reserved DB instance.
     * 
     */
    public Optional<Output<String>> offeringType() {
        return Optional.ofNullable(this.offeringType);
    }

    /**
     * Description of the reserved DB instance.
     * 
     */
    @Import(name="productDescription")
    private @Nullable Output<String> productDescription;

    /**
     * @return Description of the reserved DB instance.
     * 
     */
    public Optional<Output<String>> productDescription() {
        return Optional.ofNullable(this.productDescription);
    }

    /**
     * Recurring price charged to run this reserved DB instance.
     * 
     */
    @Import(name="recurringCharges")
    private @Nullable Output<List<ReservedInstanceRecurringChargeArgs>> recurringCharges;

    /**
     * @return Recurring price charged to run this reserved DB instance.
     * 
     */
    public Optional<Output<List<ReservedInstanceRecurringChargeArgs>>> recurringCharges() {
        return Optional.ofNullable(this.recurringCharges);
    }

    /**
     * Customer-specified identifier to track this reservation.
     * 
     */
    @Import(name="reservationId")
    private @Nullable Output<String> reservationId;

    /**
     * @return Customer-specified identifier to track this reservation.
     * 
     */
    public Optional<Output<String>> reservationId() {
        return Optional.ofNullable(this.reservationId);
    }

    /**
     * Time the reservation started.
     * 
     */
    @Import(name="startTime")
    private @Nullable Output<String> startTime;

    /**
     * @return Time the reservation started.
     * 
     */
    public Optional<Output<String>> startTime() {
        return Optional.ofNullable(this.startTime);
    }

    /**
     * State of the reserved DB instance.
     * 
     */
    @Import(name="state")
    private @Nullable Output<String> state;

    /**
     * @return State of the reserved DB instance.
     * 
     */
    public Optional<Output<String>> state() {
        return Optional.ofNullable(this.state);
    }

    /**
     * Map of tags to assign to the DB reservation. If configured with a provider `default_tags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.
     * 
     */
    @Import(name="tags")
    private @Nullable Output<Map<String,String>> tags;

    /**
     * @return Map of tags to assign to the DB reservation. If configured with a provider `default_tags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.
     * 
     */
    public Optional<Output<Map<String,String>>> tags() {
        return Optional.ofNullable(this.tags);
    }

    /**
     * Map of tags assigned to the resource, including those inherited from the provider `default_tags` configuration block.
     * 
     */
    @Import(name="tagsAll")
    private @Nullable Output<Map<String,String>> tagsAll;

    /**
     * @return Map of tags assigned to the resource, including those inherited from the provider `default_tags` configuration block.
     * 
     */
    public Optional<Output<Map<String,String>>> tagsAll() {
        return Optional.ofNullable(this.tagsAll);
    }

    /**
     * Hourly price charged for this reserved DB instance.
     * 
     */
    @Import(name="usagePrice")
    private @Nullable Output<Double> usagePrice;

    /**
     * @return Hourly price charged for this reserved DB instance.
     * 
     */
    public Optional<Output<Double>> usagePrice() {
        return Optional.ofNullable(this.usagePrice);
    }

    private ReservedInstanceState() {}

    private ReservedInstanceState(ReservedInstanceState $) {
        this.arn = $.arn;
        this.currencyCode = $.currencyCode;
        this.dbInstanceClass = $.dbInstanceClass;
        this.duration = $.duration;
        this.fixedPrice = $.fixedPrice;
        this.instanceCount = $.instanceCount;
        this.leaseId = $.leaseId;
        this.multiAz = $.multiAz;
        this.offeringId = $.offeringId;
        this.offeringType = $.offeringType;
        this.productDescription = $.productDescription;
        this.recurringCharges = $.recurringCharges;
        this.reservationId = $.reservationId;
        this.startTime = $.startTime;
        this.state = $.state;
        this.tags = $.tags;
        this.tagsAll = $.tagsAll;
        this.usagePrice = $.usagePrice;
    }

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

    public static final class Builder {
        private ReservedInstanceState $;

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

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

        /**
         * @param arn ARN for the reserved DB instance.
         * 
         * @return builder
         * 
         */
        public Builder arn(@Nullable Output<String> arn) {
            $.arn = arn;
            return this;
        }

        /**
         * @param arn ARN for the reserved DB instance.
         * 
         * @return builder
         * 
         */
        public Builder arn(String arn) {
            return arn(Output.of(arn));
        }

        /**
         * @param currencyCode Currency code for the reserved DB instance.
         * 
         * @return builder
         * 
         */
        public Builder currencyCode(@Nullable Output<String> currencyCode) {
            $.currencyCode = currencyCode;
            return this;
        }

        /**
         * @param currencyCode Currency code for the reserved DB instance.
         * 
         * @return builder
         * 
         */
        public Builder currencyCode(String currencyCode) {
            return currencyCode(Output.of(currencyCode));
        }

        /**
         * @param dbInstanceClass DB instance class for the reserved DB instance.
         * 
         * @return builder
         * 
         */
        public Builder dbInstanceClass(@Nullable Output<String> dbInstanceClass) {
            $.dbInstanceClass = dbInstanceClass;
            return this;
        }

        /**
         * @param dbInstanceClass DB instance class for the reserved DB instance.
         * 
         * @return builder
         * 
         */
        public Builder dbInstanceClass(String dbInstanceClass) {
            return dbInstanceClass(Output.of(dbInstanceClass));
        }

        /**
         * @param duration Duration of the reservation in seconds.
         * 
         * @return builder
         * 
         */
        public Builder duration(@Nullable Output<Integer> duration) {
            $.duration = duration;
            return this;
        }

        /**
         * @param duration Duration of the reservation in seconds.
         * 
         * @return builder
         * 
         */
        public Builder duration(Integer duration) {
            return duration(Output.of(duration));
        }

        /**
         * @param fixedPrice Fixed price charged for this reserved DB instance.
         * 
         * @return builder
         * 
         */
        public Builder fixedPrice(@Nullable Output<Double> fixedPrice) {
            $.fixedPrice = fixedPrice;
            return this;
        }

        /**
         * @param fixedPrice Fixed price charged for this reserved DB instance.
         * 
         * @return builder
         * 
         */
        public Builder fixedPrice(Double fixedPrice) {
            return fixedPrice(Output.of(fixedPrice));
        }

        /**
         * @param instanceCount Number of instances to reserve. Default value is `1`.
         * 
         * @return builder
         * 
         */
        public Builder instanceCount(@Nullable Output<Integer> instanceCount) {
            $.instanceCount = instanceCount;
            return this;
        }

        /**
         * @param instanceCount Number of instances to reserve. Default value is `1`.
         * 
         * @return builder
         * 
         */
        public Builder instanceCount(Integer instanceCount) {
            return instanceCount(Output.of(instanceCount));
        }

        /**
         * @param leaseId Unique identifier for the lease associated with the reserved DB instance. Amazon Web Services Support might request the lease ID for an issue related to a reserved DB instance.
         * 
         * @return builder
         * 
         */
        public Builder leaseId(@Nullable Output<String> leaseId) {
            $.leaseId = leaseId;
            return this;
        }

        /**
         * @param leaseId Unique identifier for the lease associated with the reserved DB instance. Amazon Web Services Support might request the lease ID for an issue related to a reserved DB instance.
         * 
         * @return builder
         * 
         */
        public Builder leaseId(String leaseId) {
            return leaseId(Output.of(leaseId));
        }

        /**
         * @param multiAz Whether the reservation applies to Multi-AZ deployments.
         * 
         * @return builder
         * 
         */
        public Builder multiAz(@Nullable Output<Boolean> multiAz) {
            $.multiAz = multiAz;
            return this;
        }

        /**
         * @param multiAz Whether the reservation applies to Multi-AZ deployments.
         * 
         * @return builder
         * 
         */
        public Builder multiAz(Boolean multiAz) {
            return multiAz(Output.of(multiAz));
        }

        /**
         * @param offeringId ID of the Reserved DB instance offering to purchase. To determine an `offering_id`, see the `aws.rds.getReservedInstanceOffering` data source.
         * 
         * The following arguments are optional:
         * 
         * @return builder
         * 
         */
        public Builder offeringId(@Nullable Output<String> offeringId) {
            $.offeringId = offeringId;
            return this;
        }

        /**
         * @param offeringId ID of the Reserved DB instance offering to purchase. To determine an `offering_id`, see the `aws.rds.getReservedInstanceOffering` data source.
         * 
         * The following arguments are optional:
         * 
         * @return builder
         * 
         */
        public Builder offeringId(String offeringId) {
            return offeringId(Output.of(offeringId));
        }

        /**
         * @param offeringType Offering type of this reserved DB instance.
         * 
         * @return builder
         * 
         */
        public Builder offeringType(@Nullable Output<String> offeringType) {
            $.offeringType = offeringType;
            return this;
        }

        /**
         * @param offeringType Offering type of this reserved DB instance.
         * 
         * @return builder
         * 
         */
        public Builder offeringType(String offeringType) {
            return offeringType(Output.of(offeringType));
        }

        /**
         * @param productDescription Description of the reserved DB instance.
         * 
         * @return builder
         * 
         */
        public Builder productDescription(@Nullable Output<String> productDescription) {
            $.productDescription = productDescription;
            return this;
        }

        /**
         * @param productDescription Description of the reserved DB instance.
         * 
         * @return builder
         * 
         */
        public Builder productDescription(String productDescription) {
            return productDescription(Output.of(productDescription));
        }

        /**
         * @param recurringCharges Recurring price charged to run this reserved DB instance.
         * 
         * @return builder
         * 
         */
        public Builder recurringCharges(@Nullable Output<List<ReservedInstanceRecurringChargeArgs>> recurringCharges) {
            $.recurringCharges = recurringCharges;
            return this;
        }

        /**
         * @param recurringCharges Recurring price charged to run this reserved DB instance.
         * 
         * @return builder
         * 
         */
        public Builder recurringCharges(List<ReservedInstanceRecurringChargeArgs> recurringCharges) {
            return recurringCharges(Output.of(recurringCharges));
        }

        /**
         * @param recurringCharges Recurring price charged to run this reserved DB instance.
         * 
         * @return builder
         * 
         */
        public Builder recurringCharges(ReservedInstanceRecurringChargeArgs... recurringCharges) {
            return recurringCharges(List.of(recurringCharges));
        }

        /**
         * @param reservationId Customer-specified identifier to track this reservation.
         * 
         * @return builder
         * 
         */
        public Builder reservationId(@Nullable Output<String> reservationId) {
            $.reservationId = reservationId;
            return this;
        }

        /**
         * @param reservationId Customer-specified identifier to track this reservation.
         * 
         * @return builder
         * 
         */
        public Builder reservationId(String reservationId) {
            return reservationId(Output.of(reservationId));
        }

        /**
         * @param startTime Time the reservation started.
         * 
         * @return builder
         * 
         */
        public Builder startTime(@Nullable Output<String> startTime) {
            $.startTime = startTime;
            return this;
        }

        /**
         * @param startTime Time the reservation started.
         * 
         * @return builder
         * 
         */
        public Builder startTime(String startTime) {
            return startTime(Output.of(startTime));
        }

        /**
         * @param state State of the reserved DB instance.
         * 
         * @return builder
         * 
         */
        public Builder state(@Nullable Output<String> state) {
            $.state = state;
            return this;
        }

        /**
         * @param state State of the reserved DB instance.
         * 
         * @return builder
         * 
         */
        public Builder state(String state) {
            return state(Output.of(state));
        }

        /**
         * @param tags Map of tags to assign to the DB reservation. If configured with a provider `default_tags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.
         * 
         * @return builder
         * 
         */
        public Builder tags(@Nullable Output<Map<String,String>> tags) {
            $.tags = tags;
            return this;
        }

        /**
         * @param tags Map of tags to assign to the DB reservation. If configured with a provider `default_tags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.
         * 
         * @return builder
         * 
         */
        public Builder tags(Map<String,String> tags) {
            return tags(Output.of(tags));
        }

        /**
         * @param tagsAll Map of tags assigned to the resource, including those inherited from the provider `default_tags` configuration block.
         * 
         * @return builder
         * 
         */
        public Builder tagsAll(@Nullable Output<Map<String,String>> tagsAll) {
            $.tagsAll = tagsAll;
            return this;
        }

        /**
         * @param tagsAll Map of tags assigned to the resource, including those inherited from the provider `default_tags` configuration block.
         * 
         * @return builder
         * 
         */
        public Builder tagsAll(Map<String,String> tagsAll) {
            return tagsAll(Output.of(tagsAll));
        }

        /**
         * @param usagePrice Hourly price charged for this reserved DB instance.
         * 
         * @return builder
         * 
         */
        public Builder usagePrice(@Nullable Output<Double> usagePrice) {
            $.usagePrice = usagePrice;
            return this;
        }

        /**
         * @param usagePrice Hourly price charged for this reserved DB instance.
         * 
         * @return builder
         * 
         */
        public Builder usagePrice(Double usagePrice) {
            return usagePrice(Output.of(usagePrice));
        }

        public ReservedInstanceState build() {
            return $;
        }
    }

}
