package awslightsail

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

// Properties for defining a `CfnDistribution`.
//
// Example:
//   // The code below shows an example of how to instantiate this type.
//   // The values are placeholders you should change.
//   import "github.com/aws/aws-cdk-go/awscdk"
//
//   cfnDistributionProps := &CfnDistributionProps{
//   	BundleId: jsii.String("bundleId"),
//   	DefaultCacheBehavior: &CacheBehaviorProperty{
//   		Behavior: jsii.String("behavior"),
//   	},
//   	DistributionName: jsii.String("distributionName"),
//   	Origin: &InputOriginProperty{
//   		Name: jsii.String("name"),
//   		ProtocolPolicy: jsii.String("protocolPolicy"),
//   		RegionName: jsii.String("regionName"),
//   	},
//
//   	// the properties below are optional
//   	CacheBehaviors: []interface{}{
//   		&CacheBehaviorPerPathProperty{
//   			Behavior: jsii.String("behavior"),
//   			Path: jsii.String("path"),
//   		},
//   	},
//   	CacheBehaviorSettings: &CacheSettingsProperty{
//   		AllowedHttpMethods: jsii.String("allowedHttpMethods"),
//   		CachedHttpMethods: jsii.String("cachedHttpMethods"),
//   		DefaultTtl: jsii.Number(123),
//   		ForwardedCookies: &CookieObjectProperty{
//   			CookiesAllowList: []*string{
//   				jsii.String("cookiesAllowList"),
//   			},
//   			Option: jsii.String("option"),
//   		},
//   		ForwardedHeaders: &HeaderObjectProperty{
//   			HeadersAllowList: []*string{
//   				jsii.String("headersAllowList"),
//   			},
//   			Option: jsii.String("option"),
//   		},
//   		ForwardedQueryStrings: &QueryStringObjectProperty{
//   			Option: jsii.Boolean(false),
//   			QueryStringsAllowList: []*string{
//   				jsii.String("queryStringsAllowList"),
//   			},
//   		},
//   		MaximumTtl: jsii.Number(123),
//   		MinimumTtl: jsii.Number(123),
//   	},
//   	CertificateName: jsii.String("certificateName"),
//   	IpAddressType: jsii.String("ipAddressType"),
//   	IsEnabled: jsii.Boolean(false),
//   	Tags: []cfnTag{
//   		&cfnTag{
//   			Key: jsii.String("key"),
//   			Value: jsii.String("value"),
//   		},
//   	},
//   }
//
// See: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lightsail-distribution.html
//
type CfnDistributionProps struct {
	// The ID of the bundle applied to the distribution.
	// See: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lightsail-distribution.html#cfn-lightsail-distribution-bundleid
	//
	BundleId *string `field:"required" json:"bundleId" yaml:"bundleId"`
	// An object that describes the default cache behavior of the distribution.
	// See: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lightsail-distribution.html#cfn-lightsail-distribution-defaultcachebehavior
	//
	DefaultCacheBehavior interface{} `field:"required" json:"defaultCacheBehavior" yaml:"defaultCacheBehavior"`
	// The name of the distribution.
	// See: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lightsail-distribution.html#cfn-lightsail-distribution-distributionname
	//
	DistributionName *string `field:"required" json:"distributionName" yaml:"distributionName"`
	// An object that describes the origin resource of the distribution, such as a Lightsail instance, bucket, or load balancer.
	//
	// The distribution pulls, caches, and serves content from the origin.
	// See: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lightsail-distribution.html#cfn-lightsail-distribution-origin
	//
	Origin interface{} `field:"required" json:"origin" yaml:"origin"`
	// An array of objects that describe the per-path cache behavior of the distribution.
	// See: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lightsail-distribution.html#cfn-lightsail-distribution-cachebehaviors
	//
	CacheBehaviors interface{} `field:"optional" json:"cacheBehaviors" yaml:"cacheBehaviors"`
	// An object that describes the cache behavior settings of the distribution.
	// See: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lightsail-distribution.html#cfn-lightsail-distribution-cachebehaviorsettings
	//
	CacheBehaviorSettings interface{} `field:"optional" json:"cacheBehaviorSettings" yaml:"cacheBehaviorSettings"`
	// The name of the SSL/TLS certificate attached to the distribution.
	// See: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lightsail-distribution.html#cfn-lightsail-distribution-certificatename
	//
	CertificateName *string `field:"optional" json:"certificateName" yaml:"certificateName"`
	// The IP address type of the distribution.
	//
	// The possible values are `ipv4` for IPv4 only, and `dualstack` for IPv4 and IPv6.
	// See: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lightsail-distribution.html#cfn-lightsail-distribution-ipaddresstype
	//
	IpAddressType *string `field:"optional" json:"ipAddressType" yaml:"ipAddressType"`
	// A Boolean value indicating whether the distribution is enabled.
	// See: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lightsail-distribution.html#cfn-lightsail-distribution-isenabled
	//
	IsEnabled interface{} `field:"optional" json:"isEnabled" yaml:"isEnabled"`
	// An array of key-value pairs to apply to this resource.
	//
	// For more information, see [Tag](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-resource-tags.html) in the *AWS CloudFormation User Guide* .
	//
	// > The `Value` of `Tags` is optional for Lightsail resources.
	// See: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lightsail-distribution.html#cfn-lightsail-distribution-tags
	//
	Tags *[]*awscdk.CfnTag `field:"optional" json:"tags" yaml:"tags"`
}

