package awscdk

import (
	_jsii_ "github.com/aws/jsii-runtime-go/runtime"
)

type ICfnResourceOptions interface {
	// A condition to associate with this resource.
	//
	// This means that only if the condition evaluates to 'true' when the stack
	// is deployed, the resource will be included. This is provided to allow CDK projects to produce legacy templates, but normally
	// there is no need to use it in CDK projects.
	Condition() CfnCondition
	SetCondition(c CfnCondition)
	// Associate the CreationPolicy attribute with a resource to prevent its status from reaching create complete until AWS CloudFormation receives a specified number of success signals or the timeout period is exceeded.
	//
	// To signal a
	// resource, you can use the cfn-signal helper script or SignalResource API. AWS CloudFormation publishes valid signals
	// to the stack events so that you track the number of signals sent.
	CreationPolicy() *CfnCreationPolicy
	SetCreationPolicy(c *CfnCreationPolicy)
	// With the DeletionPolicy attribute you can preserve or (in some cases) backup a resource when its stack is deleted.
	//
	// You specify a DeletionPolicy attribute for each resource that you want to control. If a resource has no DeletionPolicy
	// attribute, AWS CloudFormation deletes the resource by default. Note that this capability also applies to update operations
	// that lead to resources being removed.
	DeletionPolicy() CfnDeletionPolicy
	SetDeletionPolicy(d CfnDeletionPolicy)
	// The description of this resource.
	//
	// Used for informational purposes only, is not processed in any way
	// (and stays with the CloudFormation template, is not passed to the underlying resource,
	// even if it does have a 'description' property).
	Description() *string
	SetDescription(d *string)
	// Metadata associated with the CloudFormation resource.
	//
	// This is not the same as the construct metadata which can be added
	// using construct.addMetadata(), but would not appear in the CloudFormation template automatically.
	Metadata() *map[string]interface{}
	SetMetadata(m *map[string]interface{})
	// Use the UpdatePolicy attribute to specify how AWS CloudFormation handles updates to the AWS::AutoScaling::AutoScalingGroup resource.
	//
	// AWS CloudFormation invokes one of three update policies depending on the type of change you make or whether a
	// scheduled action is associated with the Auto Scaling group.
	UpdatePolicy() *CfnUpdatePolicy
	SetUpdatePolicy(u *CfnUpdatePolicy)
	// Use the UpdateReplacePolicy attribute to retain or (in some cases) backup the existing physical instance of a resource when it is replaced during a stack update operation.
	UpdateReplacePolicy() CfnDeletionPolicy
	SetUpdateReplacePolicy(u CfnDeletionPolicy)
	// The version of this resource.
	//
	// Used only for custom CloudFormation resources.
	// See: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cfn-customresource.html
	//
	Version() *string
	SetVersion(v *string)
}

// The jsii proxy for ICfnResourceOptions
type jsiiProxy_ICfnResourceOptions struct {
	_ byte // padding
}

func (j *jsiiProxy_ICfnResourceOptions) Condition() CfnCondition {
	var returns CfnCondition
	_jsii_.Get(
		j,
		"condition",
		&returns,
	)
	return returns
}

func (j *jsiiProxy_ICfnResourceOptions)SetCondition(val CfnCondition) {
	_jsii_.Set(
		j,
		"condition",
		val,
	)
}

func (j *jsiiProxy_ICfnResourceOptions) CreationPolicy() *CfnCreationPolicy {
	var returns *CfnCreationPolicy
	_jsii_.Get(
		j,
		"creationPolicy",
		&returns,
	)
	return returns
}

func (j *jsiiProxy_ICfnResourceOptions)SetCreationPolicy(val *CfnCreationPolicy) {
	if err := j.validateSetCreationPolicyParameters(val); err != nil {
		panic(err)
	}
	_jsii_.Set(
		j,
		"creationPolicy",
		val,
	)
}

func (j *jsiiProxy_ICfnResourceOptions) DeletionPolicy() CfnDeletionPolicy {
	var returns CfnDeletionPolicy
	_jsii_.Get(
		j,
		"deletionPolicy",
		&returns,
	)
	return returns
}

func (j *jsiiProxy_ICfnResourceOptions)SetDeletionPolicy(val CfnDeletionPolicy) {
	_jsii_.Set(
		j,
		"deletionPolicy",
		val,
	)
}

func (j *jsiiProxy_ICfnResourceOptions) Description() *string {
	var returns *string
	_jsii_.Get(
		j,
		"description",
		&returns,
	)
	return returns
}

func (j *jsiiProxy_ICfnResourceOptions)SetDescription(val *string) {
	_jsii_.Set(
		j,
		"description",
		val,
	)
}

func (j *jsiiProxy_ICfnResourceOptions) Metadata() *map[string]interface{} {
	var returns *map[string]interface{}
	_jsii_.Get(
		j,
		"metadata",
		&returns,
	)
	return returns
}

func (j *jsiiProxy_ICfnResourceOptions)SetMetadata(val *map[string]interface{}) {
	_jsii_.Set(
		j,
		"metadata",
		val,
	)
}

func (j *jsiiProxy_ICfnResourceOptions) UpdatePolicy() *CfnUpdatePolicy {
	var returns *CfnUpdatePolicy
	_jsii_.Get(
		j,
		"updatePolicy",
		&returns,
	)
	return returns
}

func (j *jsiiProxy_ICfnResourceOptions)SetUpdatePolicy(val *CfnUpdatePolicy) {
	if err := j.validateSetUpdatePolicyParameters(val); err != nil {
		panic(err)
	}
	_jsii_.Set(
		j,
		"updatePolicy",
		val,
	)
}

func (j *jsiiProxy_ICfnResourceOptions) UpdateReplacePolicy() CfnDeletionPolicy {
	var returns CfnDeletionPolicy
	_jsii_.Get(
		j,
		"updateReplacePolicy",
		&returns,
	)
	return returns
}

func (j *jsiiProxy_ICfnResourceOptions)SetUpdateReplacePolicy(val CfnDeletionPolicy) {
	_jsii_.Set(
		j,
		"updateReplacePolicy",
		val,
	)
}

func (j *jsiiProxy_ICfnResourceOptions) Version() *string {
	var returns *string
	_jsii_.Get(
		j,
		"version",
		&returns,
	)
	return returns
}

func (j *jsiiProxy_ICfnResourceOptions)SetVersion(val *string) {
	_jsii_.Set(
		j,
		"version",
		val,
	)
}

