package awsbackup

import (
	"github.com/aws/aws-cdk-go/awscdk/v2"
)

// Configuration for AWS Backup Vault Lock.
//
// Example:
//   backup.NewBackupVault(this, jsii.String("Vault"), &BackupVaultProps{
//   	LockConfiguration: &LockConfiguration{
//   		MinRetention: awscdk.Duration_Days(jsii.Number(30)),
//   	},
//   })
//
// See: https://docs.aws.amazon.com/aws-backup/latest/devguide/vault-lock.html
//
type LockConfiguration struct {
	// The minimum retention period that the vault retains its recovery points.
	//
	// If this parameter is specified, any backup or copy job to the vault must
	// have a lifecycle policy with a retention period equal to or longer than
	// the minimum retention period. If the job's retention period is shorter than
	// that minimum retention period, then the vault fails that backup or copy job,
	// and you should either modify your lifecycle settings or use a different
	// vault. Recovery points already saved in the vault prior to Vault Lock are
	// not affected.
	MinRetention awscdk.Duration `field:"required" json:"minRetention" yaml:"minRetention"`
	// The duration before the lock date.
	//
	// AWS Backup enforces a 72-hour cooling-off period before Vault Lock takes
	// effect and becomes immutable.
	//
	// Before the lock date, you can delete Vault Lock from the vault or change
	// the Vault Lock configuration. On and after the lock date, the Vault Lock
	// becomes immutable and cannot be changed or deleted.
	// Default: - Vault Lock can be deleted or changed at any time.
	//
	ChangeableFor awscdk.Duration `field:"optional" json:"changeableFor" yaml:"changeableFor"`
	// The maximum retention period that the vault retains its recovery points.
	//
	// If this parameter is specified, any backup or copy job to the vault must
	// have a lifecycle policy with a retention period equal to or shorter than
	// the maximum retention period. If the job's retention period is longer than
	// that maximum retention period, then the vault fails the backup or copy job,
	// and you should either modify your lifecycle settings or use a different
	// vault. Recovery points already saved in the vault prior to Vault Lock are
	// not affected.
	// Default: - Vault Lock does not enforce a maximum retention period.
	//
	MaxRetention awscdk.Duration `field:"optional" json:"maxRetention" yaml:"maxRetention"`
}

