// Copyright (c) HashiCorp, Inc.
// SPDX-License-Identifier: MPL-2.0

package ipsectunnel

import (
	"github.com/hashicorp/terraform-cdk-go/cdktf"
)

type IpsecTunnelConfig struct {
	// Experimental.
	Connection interface{} `field:"optional" json:"connection" yaml:"connection"`
	// Experimental.
	Count interface{} `field:"optional" json:"count" yaml:"count"`
	// Experimental.
	DependsOn *[]cdktf.ITerraformDependable `field:"optional" json:"dependsOn" yaml:"dependsOn"`
	// Experimental.
	ForEach cdktf.ITerraformIterator `field:"optional" json:"forEach" yaml:"forEach"`
	// Experimental.
	Lifecycle *cdktf.TerraformResourceLifecycle `field:"optional" json:"lifecycle" yaml:"lifecycle"`
	// Experimental.
	Provider cdktf.TerraformProvider `field:"optional" json:"provider" yaml:"provider"`
	// Experimental.
	Provisioners *[]interface{} `field:"optional" json:"provisioners" yaml:"provisioners"`
	// IP address assigned to the Cloudflare side of the IPsec tunnel.
	//
	// Docs at Terraform Registry: {@link https://registry.terraform.io/providers/cloudflare/cloudflare/4.44.0/docs/resources/ipsec_tunnel#cloudflare_endpoint IpsecTunnel#cloudflare_endpoint}
	CloudflareEndpoint *string `field:"required" json:"cloudflareEndpoint" yaml:"cloudflareEndpoint"`
	// IP address assigned to the customer side of the IPsec tunnel.
	//
	// Docs at Terraform Registry: {@link https://registry.terraform.io/providers/cloudflare/cloudflare/4.44.0/docs/resources/ipsec_tunnel#customer_endpoint IpsecTunnel#customer_endpoint}
	CustomerEndpoint *string `field:"required" json:"customerEndpoint" yaml:"customerEndpoint"`
	// 31-bit prefix (/31 in CIDR notation) supporting 2 hosts, one for each side of the tunnel.
	//
	// Docs at Terraform Registry: {@link https://registry.terraform.io/providers/cloudflare/cloudflare/4.44.0/docs/resources/ipsec_tunnel#interface_address IpsecTunnel#interface_address}
	InterfaceAddress *string `field:"required" json:"interfaceAddress" yaml:"interfaceAddress"`
	// Name of the IPsec tunnel.
	//
	// Docs at Terraform Registry: {@link https://registry.terraform.io/providers/cloudflare/cloudflare/4.44.0/docs/resources/ipsec_tunnel#name IpsecTunnel#name}
	Name *string `field:"required" json:"name" yaml:"name"`
	// The account identifier to target for the resource. **Modifying this attribute will force creation of a new resource.**.
	//
	// Docs at Terraform Registry: {@link https://registry.terraform.io/providers/cloudflare/cloudflare/4.44.0/docs/resources/ipsec_tunnel#account_id IpsecTunnel#account_id}
	AccountId *string `field:"optional" json:"accountId" yaml:"accountId"`
	// Specifies if this tunnel may use a null cipher (ENCR_NULL) in Phase 2. Defaults to `false`.
	//
	// Docs at Terraform Registry: {@link https://registry.terraform.io/providers/cloudflare/cloudflare/4.44.0/docs/resources/ipsec_tunnel#allow_null_cipher IpsecTunnel#allow_null_cipher}
	AllowNullCipher interface{} `field:"optional" json:"allowNullCipher" yaml:"allowNullCipher"`
	// An optional description of the IPsec tunnel.
	//
	// Docs at Terraform Registry: {@link https://registry.terraform.io/providers/cloudflare/cloudflare/4.44.0/docs/resources/ipsec_tunnel#description IpsecTunnel#description}
	Description *string `field:"optional" json:"description" yaml:"description"`
	// `remote_id` in the form of a fqdn. This value is generated by cloudflare.
	//
	// Docs at Terraform Registry: {@link https://registry.terraform.io/providers/cloudflare/cloudflare/4.44.0/docs/resources/ipsec_tunnel#fqdn_id IpsecTunnel#fqdn_id}
	FqdnId *string `field:"optional" json:"fqdnId" yaml:"fqdnId"`
	// Specifies the direction for the health check. Available values: `unidirectional`, `bidirectional` Default: `unidirectional`.
	//
	// Docs at Terraform Registry: {@link https://registry.terraform.io/providers/cloudflare/cloudflare/4.44.0/docs/resources/ipsec_tunnel#health_check_direction IpsecTunnel#health_check_direction}
	HealthCheckDirection *string `field:"optional" json:"healthCheckDirection" yaml:"healthCheckDirection"`
	// Specifies if ICMP tunnel health checks are enabled. Default: `true`.
	//
	// Docs at Terraform Registry: {@link https://registry.terraform.io/providers/cloudflare/cloudflare/4.44.0/docs/resources/ipsec_tunnel#health_check_enabled IpsecTunnel#health_check_enabled}
	HealthCheckEnabled interface{} `field:"optional" json:"healthCheckEnabled" yaml:"healthCheckEnabled"`
	// Specifies the ICMP rate for the health check. Available values: `low`, `mid`, `high` Default: `mid`.
	//
	// Docs at Terraform Registry: {@link https://registry.terraform.io/providers/cloudflare/cloudflare/4.44.0/docs/resources/ipsec_tunnel#health_check_rate IpsecTunnel#health_check_rate}
	HealthCheckRate *string `field:"optional" json:"healthCheckRate" yaml:"healthCheckRate"`
	// The IP address of the customer endpoint that will receive tunnel health checks. Default: `<customer_gre_endpoint>`.
	//
	// Docs at Terraform Registry: {@link https://registry.terraform.io/providers/cloudflare/cloudflare/4.44.0/docs/resources/ipsec_tunnel#health_check_target IpsecTunnel#health_check_target}
	HealthCheckTarget *string `field:"optional" json:"healthCheckTarget" yaml:"healthCheckTarget"`
	// Specifies the ICMP echo type for the health check (`request` or `reply`). Available values: `request`, `reply` Default: `reply`.
	//
	// Docs at Terraform Registry: {@link https://registry.terraform.io/providers/cloudflare/cloudflare/4.44.0/docs/resources/ipsec_tunnel#health_check_type IpsecTunnel#health_check_type}
	HealthCheckType *string `field:"optional" json:"healthCheckType" yaml:"healthCheckType"`
	// `remote_id` as a hex string. This value is generated by cloudflare.
	//
	// Docs at Terraform Registry: {@link https://registry.terraform.io/providers/cloudflare/cloudflare/4.44.0/docs/resources/ipsec_tunnel#hex_id IpsecTunnel#hex_id}
	HexId *string `field:"optional" json:"hexId" yaml:"hexId"`
	// Docs at Terraform Registry: {@link https://registry.terraform.io/providers/cloudflare/cloudflare/4.44.0/docs/resources/ipsec_tunnel#id IpsecTunnel#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.
	Id *string `field:"optional" json:"id" yaml:"id"`
	// Pre shared key to be used with the IPsec tunnel. If left unset, it will be autogenerated.
	//
	// Docs at Terraform Registry: {@link https://registry.terraform.io/providers/cloudflare/cloudflare/4.44.0/docs/resources/ipsec_tunnel#psk IpsecTunnel#psk}
	Psk *string `field:"optional" json:"psk" yaml:"psk"`
	// ID to be used while setting up the IPsec tunnel. This value is generated by cloudflare.
	//
	// Docs at Terraform Registry: {@link https://registry.terraform.io/providers/cloudflare/cloudflare/4.44.0/docs/resources/ipsec_tunnel#remote_id IpsecTunnel#remote_id}
	RemoteId *string `field:"optional" json:"remoteId" yaml:"remoteId"`
	// Specifies if replay protection is enabled. Defaults to `false`.
	//
	// Docs at Terraform Registry: {@link https://registry.terraform.io/providers/cloudflare/cloudflare/4.44.0/docs/resources/ipsec_tunnel#replay_protection IpsecTunnel#replay_protection}
	ReplayProtection interface{} `field:"optional" json:"replayProtection" yaml:"replayProtection"`
	// `remote_id` in the form of an email address. This value is generated by cloudflare.
	//
	// Docs at Terraform Registry: {@link https://registry.terraform.io/providers/cloudflare/cloudflare/4.44.0/docs/resources/ipsec_tunnel#user_id IpsecTunnel#user_id}
	UserId *string `field:"optional" json:"userId" yaml:"userId"`
}

