// Code generated by azure-service-operator-codegen. DO NOT EDIT.
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT license.
package arm

import "github.com/Azure/azure-service-operator/v2/pkg/genruntime"

type BastionHost_Spec struct {
	// Location: Resource location.
	Location *string `json:"location,omitempty"`
	Name     string  `json:"name,omitempty"`

	// Properties: Represents the bastion host resource.
	Properties *BastionHostPropertiesFormat `json:"properties,omitempty"`

	// Sku: The sku of this Bastion Host.
	Sku *Sku `json:"sku,omitempty"`

	// Tags: Resource tags.
	Tags map[string]string `json:"tags,omitempty"`

	// Zones: A list of availability zones denoting where the resource needs to come from.
	Zones []string `json:"zones,omitempty"`
}

var _ genruntime.ARMResourceSpec = &BastionHost_Spec{}

// GetAPIVersion returns the ARM API version of the resource. This is always "2024-03-01"
func (host BastionHost_Spec) GetAPIVersion() string {
	return "2024-03-01"
}

// GetName returns the Name of the resource
func (host *BastionHost_Spec) GetName() string {
	return host.Name
}

// GetType returns the ARM Type of the resource. This is always "Microsoft.Network/bastionHosts"
func (host *BastionHost_Spec) GetType() string {
	return "Microsoft.Network/bastionHosts"
}

// Properties of the Bastion Host.
type BastionHostPropertiesFormat struct {
	// DisableCopyPaste: Enable/Disable Copy/Paste feature of the Bastion Host resource.
	DisableCopyPaste *bool `json:"disableCopyPaste,omitempty"`

	// DnsName: FQDN for the endpoint on which bastion host is accessible.
	DnsName *string `json:"dnsName,omitempty"`

	// EnableFileCopy: Enable/Disable File Copy feature of the Bastion Host resource.
	EnableFileCopy *bool `json:"enableFileCopy,omitempty"`

	// EnableIpConnect: Enable/Disable IP Connect feature of the Bastion Host resource.
	EnableIpConnect *bool `json:"enableIpConnect,omitempty"`

	// EnableKerberos: Enable/Disable Kerberos feature of the Bastion Host resource.
	EnableKerberos *bool `json:"enableKerberos,omitempty"`

	// EnableSessionRecording: Enable/Disable Session Recording feature of the Bastion Host resource.
	EnableSessionRecording *bool `json:"enableSessionRecording,omitempty"`

	// EnableShareableLink: Enable/Disable Shareable Link of the Bastion Host resource.
	EnableShareableLink *bool `json:"enableShareableLink,omitempty"`

	// EnableTunneling: Enable/Disable Tunneling feature of the Bastion Host resource.
	EnableTunneling *bool `json:"enableTunneling,omitempty"`

	// IpConfigurations: IP configuration of the Bastion Host resource.
	IpConfigurations []BastionHostIPConfiguration             `json:"ipConfigurations,omitempty"`
	NetworkAcls      *BastionHostPropertiesFormat_NetworkAcls `json:"networkAcls,omitempty"`

	// ScaleUnits: The scale units for the Bastion Host resource.
	ScaleUnits *int `json:"scaleUnits,omitempty"`

	// VirtualNetwork: Reference to an existing virtual network required for Developer Bastion Host only.
	VirtualNetwork *SubResource `json:"virtualNetwork,omitempty"`
}

// The sku of this Bastion Host.
type Sku struct {
	// Name: The name of the sku of this Bastion Host.
	Name *Sku_Name `json:"name,omitempty"`
}

// IP configuration of an Bastion Host.
type BastionHostIPConfiguration struct {
	// Name: Name of the resource that is unique within a resource group. This name can be used to access the resource.
	Name *string `json:"name,omitempty"`

	// Properties: Represents the ip configuration associated with the resource.
	Properties *BastionHostIPConfigurationPropertiesFormat `json:"properties,omitempty"`
}

type BastionHostPropertiesFormat_NetworkAcls struct {
	// IpRules: Sets the IP ACL rules for Developer Bastion Host.
	IpRules []IPRule `json:"ipRules,omitempty"`
}

// +kubebuilder:validation:Enum={"Basic","Developer","Premium","Standard"}
type Sku_Name string

const (
	Sku_Name_Basic     = Sku_Name("Basic")
	Sku_Name_Developer = Sku_Name("Developer")
	Sku_Name_Premium   = Sku_Name("Premium")
	Sku_Name_Standard  = Sku_Name("Standard")
)

// Mapping from string to Sku_Name
var sku_Name_Values = map[string]Sku_Name{
	"basic":     Sku_Name_Basic,
	"developer": Sku_Name_Developer,
	"premium":   Sku_Name_Premium,
	"standard":  Sku_Name_Standard,
}

// Properties of IP configuration of an Bastion Host.
type BastionHostIPConfigurationPropertiesFormat struct {
	// PrivateIPAllocationMethod: Private IP allocation method.
	PrivateIPAllocationMethod *IPAllocationMethod `json:"privateIPAllocationMethod,omitempty"`

	// PublicIPAddress: Reference of the PublicIP resource.
	PublicIPAddress *SubResource `json:"publicIPAddress,omitempty"`

	// Subnet: Reference of the subnet resource.
	Subnet *SubResource `json:"subnet,omitempty"`
}

type IPRule struct {
	// AddressPrefix: Specifies the IP or IP range in CIDR format. Only IPV4 address is allowed.
	AddressPrefix *string `json:"addressPrefix,omitempty"`
}
