/**
 * Copyright (c) HashiCorp, Inc.
 * SPDX-License-Identifier: MPL-2.0
 */
import { Construct } from 'constructs';
import * as cdktf from 'cdktf';
export interface FirestoreDatabaseConfig extends cdktf.TerraformMetaArguments {
    /**
    * The App Engine integration mode to use for this database. Possible values: ["ENABLED", "DISABLED"]
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.10.0/docs/resources/firestore_database#app_engine_integration_mode FirestoreDatabase#app_engine_integration_mode}
    */
    readonly appEngineIntegrationMode?: string;
    /**
    * The concurrency control mode to use for this database. Possible values: ["OPTIMISTIC", "PESSIMISTIC", "OPTIMISTIC_WITH_ENTITY_GROUPS"]
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.10.0/docs/resources/firestore_database#concurrency_mode FirestoreDatabase#concurrency_mode}
    */
    readonly concurrencyMode?: string;
    /**
    * State of delete protection for the database.
    * When delete protection is enabled, this database cannot be deleted.
    * The default value is 'DELETE_PROTECTION_STATE_UNSPECIFIED', which is currently equivalent to 'DELETE_PROTECTION_DISABLED'.
    * **Note:** Additionally, to delete this database using 'terraform destroy', 'deletion_policy' must be set to 'DELETE'. Possible values: ["DELETE_PROTECTION_STATE_UNSPECIFIED", "DELETE_PROTECTION_ENABLED", "DELETE_PROTECTION_DISABLED"]
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.10.0/docs/resources/firestore_database#delete_protection_state FirestoreDatabase#delete_protection_state}
    */
    readonly deleteProtectionState?: string;
    /**
    * Deletion behavior for this database.
    * If the deletion policy is 'ABANDON', the database will be removed from Terraform state but not deleted from Google Cloud upon destruction.
    * If the deletion policy is 'DELETE', the database will both be removed from Terraform state and deleted from Google Cloud upon destruction.
    * The default value is 'ABANDON'.
    * See also 'delete_protection'.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.10.0/docs/resources/firestore_database#deletion_policy FirestoreDatabase#deletion_policy}
    */
    readonly deletionPolicy?: string;
    /**
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.10.0/docs/resources/firestore_database#id FirestoreDatabase#id}
    *
    * Please be aware that the id field is automatically added to all resources in Terraform providers using a Terraform provider SDK version below 2.
    * If you experience problems setting this value it might not be settable. Please take a look at the provider documentation to ensure it should be settable.
    */
    readonly id?: string;
    /**
    * The location of the database. Available locations are listed at
    * https://cloud.google.com/firestore/docs/locations.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.10.0/docs/resources/firestore_database#location_id FirestoreDatabase#location_id}
    */
    readonly locationId: string;
    /**
    * The ID to use for the database, which will become the final
    * component of the database's resource name. This value should be 4-63
    * characters. Valid characters are /[a-z][0-9]-/ with first character
    * a letter and the last a letter or a number. Must not be
    * UUID-like /[0-9a-f]{8}(-[0-9a-f]{4}){3}-[0-9a-f]{12}/.
    * "(default)" database id is also valid.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.10.0/docs/resources/firestore_database#name FirestoreDatabase#name}
    */
    readonly name: string;
    /**
    * Whether to enable the PITR feature on this database.
    * If 'POINT_IN_TIME_RECOVERY_ENABLED' is selected, reads are supported on selected versions of the data from within the past 7 days.
    * versionRetentionPeriod and earliestVersionTime can be used to determine the supported versions. These include reads against any timestamp within the past hour
    * and reads against 1-minute snapshots beyond 1 hour and within 7 days.
    * If 'POINT_IN_TIME_RECOVERY_DISABLED' is selected, reads are supported on any version of the data from within the past 1 hour. Default value: "POINT_IN_TIME_RECOVERY_DISABLED" Possible values: ["POINT_IN_TIME_RECOVERY_ENABLED", "POINT_IN_TIME_RECOVERY_DISABLED"]
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.10.0/docs/resources/firestore_database#point_in_time_recovery_enablement FirestoreDatabase#point_in_time_recovery_enablement}
    */
    readonly pointInTimeRecoveryEnablement?: string;
    /**
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.10.0/docs/resources/firestore_database#project FirestoreDatabase#project}
    */
    readonly project?: string;
    /**
    * The type of the database.
    * See https://cloud.google.com/datastore/docs/firestore-or-datastore
    * for information about how to choose. Possible values: ["FIRESTORE_NATIVE", "DATASTORE_MODE"]
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.10.0/docs/resources/firestore_database#type FirestoreDatabase#type}
    */
    readonly type: string;
    /**
    * cmek_config block
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.10.0/docs/resources/firestore_database#cmek_config FirestoreDatabase#cmek_config}
    */
    readonly cmekConfig?: FirestoreDatabaseCmekConfig;
    /**
    * timeouts block
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.10.0/docs/resources/firestore_database#timeouts FirestoreDatabase#timeouts}
    */
    readonly timeouts?: FirestoreDatabaseTimeouts;
}
export interface FirestoreDatabaseCmekConfig {
    /**
    * The resource ID of a Cloud KMS key. If set, the database created will
    * be a Customer-managed Encryption Key (CMEK) database encrypted with
    * this key. This feature is allowlist only in initial launch.
    *
    * Only keys in the same location as this database are allowed to be used
    * for encryption. For Firestore's nam5 multi-region, this corresponds to Cloud KMS
    * multi-region us. For Firestore's eur3 multi-region, this corresponds to
    * Cloud KMS multi-region europe. See https://cloud.google.com/kms/docs/locations.
    *
    * This value should be the KMS key resource ID in the format of
    * 'projects/{project_id}/locations/{kms_location}/keyRings/{key_ring}/cryptoKeys/{crypto_key}'.
    * How to retrive this resource ID is listed at
    * https://cloud.google.com/kms/docs/getting-resource-ids#getting_the_id_for_a_key_and_version.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.10.0/docs/resources/firestore_database#kms_key_name FirestoreDatabase#kms_key_name}
    */
    readonly kmsKeyName: string;
}
export declare function firestoreDatabaseCmekConfigToTerraform(struct?: FirestoreDatabaseCmekConfigOutputReference | FirestoreDatabaseCmekConfig): any;
export declare function firestoreDatabaseCmekConfigToHclTerraform(struct?: FirestoreDatabaseCmekConfigOutputReference | FirestoreDatabaseCmekConfig): any;
export declare class FirestoreDatabaseCmekConfigOutputReference extends cdktf.ComplexObject {
    private isEmptyObject;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    */
    constructor(terraformResource: cdktf.IInterpolatingParent, terraformAttribute: string);
    get internalValue(): FirestoreDatabaseCmekConfig | undefined;
    set internalValue(value: FirestoreDatabaseCmekConfig | undefined);
    get activeKeyVersion(): string[];
    private _kmsKeyName?;
    get kmsKeyName(): string;
    set kmsKeyName(value: string);
    get kmsKeyNameInput(): string | undefined;
}
export interface FirestoreDatabaseTimeouts {
    /**
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.10.0/docs/resources/firestore_database#create FirestoreDatabase#create}
    */
    readonly create?: string;
    /**
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.10.0/docs/resources/firestore_database#delete FirestoreDatabase#delete}
    */
    readonly delete?: string;
    /**
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.10.0/docs/resources/firestore_database#update FirestoreDatabase#update}
    */
    readonly update?: string;
}
export declare function firestoreDatabaseTimeoutsToTerraform(struct?: FirestoreDatabaseTimeouts | cdktf.IResolvable): any;
export declare function firestoreDatabaseTimeoutsToHclTerraform(struct?: FirestoreDatabaseTimeouts | cdktf.IResolvable): any;
export declare class FirestoreDatabaseTimeoutsOutputReference extends cdktf.ComplexObject {
    private isEmptyObject;
    private resolvableValue?;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    */
    constructor(terraformResource: cdktf.IInterpolatingParent, terraformAttribute: string);
    get internalValue(): FirestoreDatabaseTimeouts | cdktf.IResolvable | undefined;
    set internalValue(value: FirestoreDatabaseTimeouts | cdktf.IResolvable | undefined);
    private _create?;
    get create(): string;
    set create(value: string);
    resetCreate(): void;
    get createInput(): string | undefined;
    private _delete?;
    get delete(): string;
    set delete(value: string);
    resetDelete(): void;
    get deleteInput(): string | undefined;
    private _update?;
    get update(): string;
    set update(value: string);
    resetUpdate(): void;
    get updateInput(): string | undefined;
}
/**
* Represents a {@link https://registry.terraform.io/providers/hashicorp/google/6.10.0/docs/resources/firestore_database google_firestore_database}
*/
export declare class FirestoreDatabase extends cdktf.TerraformResource {
    static readonly tfResourceType = "google_firestore_database";
    /**
    * Generates CDKTF code for importing a FirestoreDatabase resource upon running "cdktf plan <stack-name>"
    * @param scope The scope in which to define this construct
    * @param importToId The construct id used in the generated config for the FirestoreDatabase to import
    * @param importFromId The id of the existing FirestoreDatabase that should be imported. Refer to the {@link https://registry.terraform.io/providers/hashicorp/google/6.10.0/docs/resources/firestore_database#import import section} in the documentation of this resource for the id to use
    * @param provider? Optional instance of the provider where the FirestoreDatabase to import is found
    */
    static generateConfigForImport(scope: Construct, importToId: string, importFromId: string, provider?: cdktf.TerraformProvider): cdktf.ImportableResource;
    /**
    * Create a new {@link https://registry.terraform.io/providers/hashicorp/google/6.10.0/docs/resources/firestore_database google_firestore_database} Resource
    *
    * @param scope The scope in which to define this construct
    * @param id The scoped construct ID. Must be unique amongst siblings in the same scope
    * @param options FirestoreDatabaseConfig
    */
    constructor(scope: Construct, id: string, config: FirestoreDatabaseConfig);
    private _appEngineIntegrationMode?;
    get appEngineIntegrationMode(): string;
    set appEngineIntegrationMode(value: string);
    resetAppEngineIntegrationMode(): void;
    get appEngineIntegrationModeInput(): string | undefined;
    private _concurrencyMode?;
    get concurrencyMode(): string;
    set concurrencyMode(value: string);
    resetConcurrencyMode(): void;
    get concurrencyModeInput(): string | undefined;
    get createTime(): string;
    private _deleteProtectionState?;
    get deleteProtectionState(): string;
    set deleteProtectionState(value: string);
    resetDeleteProtectionState(): void;
    get deleteProtectionStateInput(): string | undefined;
    private _deletionPolicy?;
    get deletionPolicy(): string;
    set deletionPolicy(value: string);
    resetDeletionPolicy(): void;
    get deletionPolicyInput(): string | undefined;
    get earliestVersionTime(): string;
    get etag(): string;
    private _id?;
    get id(): string;
    set id(value: string);
    resetId(): void;
    get idInput(): string | undefined;
    get keyPrefix(): string;
    private _locationId?;
    get locationId(): string;
    set locationId(value: string);
    get locationIdInput(): string | undefined;
    private _name?;
    get name(): string;
    set name(value: string);
    get nameInput(): string | undefined;
    private _pointInTimeRecoveryEnablement?;
    get pointInTimeRecoveryEnablement(): string;
    set pointInTimeRecoveryEnablement(value: string);
    resetPointInTimeRecoveryEnablement(): void;
    get pointInTimeRecoveryEnablementInput(): string | undefined;
    private _project?;
    get project(): string;
    set project(value: string);
    resetProject(): void;
    get projectInput(): string | undefined;
    private _type?;
    get type(): string;
    set type(value: string);
    get typeInput(): string | undefined;
    get uid(): string;
    get updateTime(): string;
    get versionRetentionPeriod(): string;
    private _cmekConfig;
    get cmekConfig(): FirestoreDatabaseCmekConfigOutputReference;
    putCmekConfig(value: FirestoreDatabaseCmekConfig): void;
    resetCmekConfig(): void;
    get cmekConfigInput(): FirestoreDatabaseCmekConfig | undefined;
    private _timeouts;
    get timeouts(): FirestoreDatabaseTimeoutsOutputReference;
    putTimeouts(value: FirestoreDatabaseTimeouts): void;
    resetTimeouts(): void;
    get timeoutsInput(): cdktf.IResolvable | FirestoreDatabaseTimeouts | undefined;
    protected synthesizeAttributes(): {
        [name: string]: any;
    };
    protected synthesizeHclAttributes(): {
        [name: string]: any;
    };
}
