/**
 * Copyright (c) HashiCorp, Inc.
 * SPDX-License-Identifier: MPL-2.0
 */
import { Construct } from 'constructs';
import * as cdktf from 'cdktf';
export interface SpannerBackupScheduleConfig extends cdktf.TerraformMetaArguments {
    /**
    * The database to create the backup schedule on.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.35.0/docs/resources/spanner_backup_schedule#database SpannerBackupSchedule#database}
    */
    readonly database: string;
    /**
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.35.0/docs/resources/spanner_backup_schedule#id SpannerBackupSchedule#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 instance to create the database on.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.35.0/docs/resources/spanner_backup_schedule#instance SpannerBackupSchedule#instance}
    */
    readonly instance: string;
    /**
    * A unique identifier for the backup schedule, which cannot be changed after
    * the backup schedule is created. Values are of the form [a-z][-a-z0-9]*[a-z0-9].
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.35.0/docs/resources/spanner_backup_schedule#name SpannerBackupSchedule#name}
    */
    readonly name?: string;
    /**
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.35.0/docs/resources/spanner_backup_schedule#project SpannerBackupSchedule#project}
    */
    readonly project?: string;
    /**
    * At what relative time in the future, compared to its creation time, the backup should be deleted, e.g. keep backups for 7 days.
    * A duration in seconds with up to nine fractional digits, ending with 's'. Example: '3.5s'.
    * You can set this to a value up to 366 days.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.35.0/docs/resources/spanner_backup_schedule#retention_duration SpannerBackupSchedule#retention_duration}
    */
    readonly retentionDuration: string;
    /**
    * encryption_config block
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.35.0/docs/resources/spanner_backup_schedule#encryption_config SpannerBackupSchedule#encryption_config}
    */
    readonly encryptionConfig?: SpannerBackupScheduleEncryptionConfig;
    /**
    * full_backup_spec block
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.35.0/docs/resources/spanner_backup_schedule#full_backup_spec SpannerBackupSchedule#full_backup_spec}
    */
    readonly fullBackupSpec?: SpannerBackupScheduleFullBackupSpec;
    /**
    * incremental_backup_spec block
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.35.0/docs/resources/spanner_backup_schedule#incremental_backup_spec SpannerBackupSchedule#incremental_backup_spec}
    */
    readonly incrementalBackupSpec?: SpannerBackupScheduleIncrementalBackupSpec;
    /**
    * spec block
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.35.0/docs/resources/spanner_backup_schedule#spec SpannerBackupSchedule#spec}
    */
    readonly spec?: SpannerBackupScheduleSpec;
    /**
    * timeouts block
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.35.0/docs/resources/spanner_backup_schedule#timeouts SpannerBackupSchedule#timeouts}
    */
    readonly timeouts?: SpannerBackupScheduleTimeouts;
}
export interface SpannerBackupScheduleEncryptionConfig {
    /**
    * The encryption type of backups created by the backup schedule.
    * Possible values are USE_DATABASE_ENCRYPTION, GOOGLE_DEFAULT_ENCRYPTION, or CUSTOMER_MANAGED_ENCRYPTION.
    * If you use CUSTOMER_MANAGED_ENCRYPTION, you must specify a kmsKeyName.
    * If your backup type is incremental-backup, the encryption type must be GOOGLE_DEFAULT_ENCRYPTION. Possible values: ["USE_DATABASE_ENCRYPTION", "GOOGLE_DEFAULT_ENCRYPTION", "CUSTOMER_MANAGED_ENCRYPTION"]
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.35.0/docs/resources/spanner_backup_schedule#encryption_type SpannerBackupSchedule#encryption_type}
    */
    readonly encryptionType: string;
    /**
    * The resource name of the Cloud KMS key to use for encryption.
    * Format: 'projects/{project}/locations/{location}/keyRings/{keyRing}/cryptoKeys/{cryptoKey}'
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.35.0/docs/resources/spanner_backup_schedule#kms_key_name SpannerBackupSchedule#kms_key_name}
    */
    readonly kmsKeyName?: string;
}
export declare function spannerBackupScheduleEncryptionConfigToTerraform(struct?: SpannerBackupScheduleEncryptionConfigOutputReference | SpannerBackupScheduleEncryptionConfig): any;
export declare function spannerBackupScheduleEncryptionConfigToHclTerraform(struct?: SpannerBackupScheduleEncryptionConfigOutputReference | SpannerBackupScheduleEncryptionConfig): any;
export declare class SpannerBackupScheduleEncryptionConfigOutputReference 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(): SpannerBackupScheduleEncryptionConfig | undefined;
    set internalValue(value: SpannerBackupScheduleEncryptionConfig | undefined);
    private _encryptionType?;
    get encryptionType(): string;
    set encryptionType(value: string);
    get encryptionTypeInput(): string | undefined;
    private _kmsKeyName?;
    get kmsKeyName(): string;
    set kmsKeyName(value: string);
    resetKmsKeyName(): void;
    get kmsKeyNameInput(): string | undefined;
}
export interface SpannerBackupScheduleFullBackupSpec {
}
export declare function spannerBackupScheduleFullBackupSpecToTerraform(struct?: SpannerBackupScheduleFullBackupSpecOutputReference | SpannerBackupScheduleFullBackupSpec): any;
export declare function spannerBackupScheduleFullBackupSpecToHclTerraform(struct?: SpannerBackupScheduleFullBackupSpecOutputReference | SpannerBackupScheduleFullBackupSpec): any;
export declare class SpannerBackupScheduleFullBackupSpecOutputReference 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(): SpannerBackupScheduleFullBackupSpec | undefined;
    set internalValue(value: SpannerBackupScheduleFullBackupSpec | undefined);
}
export interface SpannerBackupScheduleIncrementalBackupSpec {
}
export declare function spannerBackupScheduleIncrementalBackupSpecToTerraform(struct?: SpannerBackupScheduleIncrementalBackupSpecOutputReference | SpannerBackupScheduleIncrementalBackupSpec): any;
export declare function spannerBackupScheduleIncrementalBackupSpecToHclTerraform(struct?: SpannerBackupScheduleIncrementalBackupSpecOutputReference | SpannerBackupScheduleIncrementalBackupSpec): any;
export declare class SpannerBackupScheduleIncrementalBackupSpecOutputReference 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(): SpannerBackupScheduleIncrementalBackupSpec | undefined;
    set internalValue(value: SpannerBackupScheduleIncrementalBackupSpec | undefined);
}
export interface SpannerBackupScheduleSpecCronSpec {
    /**
    * Textual representation of the crontab. User can customize the
    * backup frequency and the backup version time using the cron
    * expression. The version time must be in UTC timzeone.
    * The backup will contain an externally consistent copy of the
    * database at the version time. Allowed frequencies are 12 hour, 1 day,
    * 1 week and 1 month. Examples of valid cron specifications:
    *   0 2/12 * * * : every 12 hours at (2, 14) hours past midnight in UTC.
    *   0 2,14 * * * : every 12 hours at (2,14) hours past midnight in UTC.
    *   0 2 * * *    : once a day at 2 past midnight in UTC.
    *   0 2 * * 0    : once a week every Sunday at 2 past midnight in UTC.
    *   0 2 8 * *    : once a month on 8th day at 2 past midnight in UTC.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.35.0/docs/resources/spanner_backup_schedule#text SpannerBackupSchedule#text}
    */
    readonly text?: string;
}
export declare function spannerBackupScheduleSpecCronSpecToTerraform(struct?: SpannerBackupScheduleSpecCronSpecOutputReference | SpannerBackupScheduleSpecCronSpec): any;
export declare function spannerBackupScheduleSpecCronSpecToHclTerraform(struct?: SpannerBackupScheduleSpecCronSpecOutputReference | SpannerBackupScheduleSpecCronSpec): any;
export declare class SpannerBackupScheduleSpecCronSpecOutputReference 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(): SpannerBackupScheduleSpecCronSpec | undefined;
    set internalValue(value: SpannerBackupScheduleSpecCronSpec | undefined);
    private _text?;
    get text(): string;
    set text(value: string);
    resetText(): void;
    get textInput(): string | undefined;
}
export interface SpannerBackupScheduleSpec {
    /**
    * cron_spec block
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.35.0/docs/resources/spanner_backup_schedule#cron_spec SpannerBackupSchedule#cron_spec}
    */
    readonly cronSpec?: SpannerBackupScheduleSpecCronSpec;
}
export declare function spannerBackupScheduleSpecToTerraform(struct?: SpannerBackupScheduleSpecOutputReference | SpannerBackupScheduleSpec): any;
export declare function spannerBackupScheduleSpecToHclTerraform(struct?: SpannerBackupScheduleSpecOutputReference | SpannerBackupScheduleSpec): any;
export declare class SpannerBackupScheduleSpecOutputReference 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(): SpannerBackupScheduleSpec | undefined;
    set internalValue(value: SpannerBackupScheduleSpec | undefined);
    private _cronSpec;
    get cronSpec(): SpannerBackupScheduleSpecCronSpecOutputReference;
    putCronSpec(value: SpannerBackupScheduleSpecCronSpec): void;
    resetCronSpec(): void;
    get cronSpecInput(): SpannerBackupScheduleSpecCronSpec | undefined;
}
export interface SpannerBackupScheduleTimeouts {
    /**
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.35.0/docs/resources/spanner_backup_schedule#create SpannerBackupSchedule#create}
    */
    readonly create?: string;
    /**
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.35.0/docs/resources/spanner_backup_schedule#delete SpannerBackupSchedule#delete}
    */
    readonly delete?: string;
    /**
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.35.0/docs/resources/spanner_backup_schedule#update SpannerBackupSchedule#update}
    */
    readonly update?: string;
}
export declare function spannerBackupScheduleTimeoutsToTerraform(struct?: SpannerBackupScheduleTimeouts | cdktf.IResolvable): any;
export declare function spannerBackupScheduleTimeoutsToHclTerraform(struct?: SpannerBackupScheduleTimeouts | cdktf.IResolvable): any;
export declare class SpannerBackupScheduleTimeoutsOutputReference 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(): SpannerBackupScheduleTimeouts | cdktf.IResolvable | undefined;
    set internalValue(value: SpannerBackupScheduleTimeouts | 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.35.0/docs/resources/spanner_backup_schedule google_spanner_backup_schedule}
*/
export declare class SpannerBackupSchedule extends cdktf.TerraformResource {
    static readonly tfResourceType = "google_spanner_backup_schedule";
    /**
    * Generates CDKTF code for importing a SpannerBackupSchedule 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 SpannerBackupSchedule to import
    * @param importFromId The id of the existing SpannerBackupSchedule that should be imported. Refer to the {@link https://registry.terraform.io/providers/hashicorp/google/6.35.0/docs/resources/spanner_backup_schedule#import import section} in the documentation of this resource for the id to use
    * @param provider? Optional instance of the provider where the SpannerBackupSchedule 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.35.0/docs/resources/spanner_backup_schedule google_spanner_backup_schedule} 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 SpannerBackupScheduleConfig
    */
    constructor(scope: Construct, id: string, config: SpannerBackupScheduleConfig);
    private _database?;
    get database(): string;
    set database(value: string);
    get databaseInput(): string | undefined;
    private _id?;
    get id(): string;
    set id(value: string);
    resetId(): void;
    get idInput(): string | undefined;
    private _instance?;
    get instance(): string;
    set instance(value: string);
    get instanceInput(): string | undefined;
    private _name?;
    get name(): string;
    set name(value: string);
    resetName(): void;
    get nameInput(): string | undefined;
    private _project?;
    get project(): string;
    set project(value: string);
    resetProject(): void;
    get projectInput(): string | undefined;
    private _retentionDuration?;
    get retentionDuration(): string;
    set retentionDuration(value: string);
    get retentionDurationInput(): string | undefined;
    private _encryptionConfig;
    get encryptionConfig(): SpannerBackupScheduleEncryptionConfigOutputReference;
    putEncryptionConfig(value: SpannerBackupScheduleEncryptionConfig): void;
    resetEncryptionConfig(): void;
    get encryptionConfigInput(): SpannerBackupScheduleEncryptionConfig | undefined;
    private _fullBackupSpec;
    get fullBackupSpec(): SpannerBackupScheduleFullBackupSpecOutputReference;
    putFullBackupSpec(value: SpannerBackupScheduleFullBackupSpec): void;
    resetFullBackupSpec(): void;
    get fullBackupSpecInput(): SpannerBackupScheduleFullBackupSpec | undefined;
    private _incrementalBackupSpec;
    get incrementalBackupSpec(): SpannerBackupScheduleIncrementalBackupSpecOutputReference;
    putIncrementalBackupSpec(value: SpannerBackupScheduleIncrementalBackupSpec): void;
    resetIncrementalBackupSpec(): void;
    get incrementalBackupSpecInput(): SpannerBackupScheduleIncrementalBackupSpec | undefined;
    private _spec;
    get spec(): SpannerBackupScheduleSpecOutputReference;
    putSpec(value: SpannerBackupScheduleSpec): void;
    resetSpec(): void;
    get specInput(): SpannerBackupScheduleSpec | undefined;
    private _timeouts;
    get timeouts(): SpannerBackupScheduleTimeoutsOutputReference;
    putTimeouts(value: SpannerBackupScheduleTimeouts): void;
    resetTimeouts(): void;
    get timeoutsInput(): cdktf.IResolvable | SpannerBackupScheduleTimeouts | undefined;
    protected synthesizeAttributes(): {
        [name: string]: any;
    };
    protected synthesizeHclAttributes(): {
        [name: string]: any;
    };
}
