// 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 Fleet_Spec struct {
	// Identity: Managed identity.
	Identity *ManagedServiceIdentity `json:"identity,omitempty"`

	// Location: The geo-location where the resource lives
	Location *string `json:"location,omitempty"`
	Name     string  `json:"name,omitempty"`

	// Properties: The resource-specific properties for this resource.
	Properties *FleetProperties `json:"properties,omitempty"`

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

var _ genruntime.ARMResourceSpec = &Fleet_Spec{}

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

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

// GetType returns the ARM Type of the resource. This is always "Microsoft.ContainerService/fleets"
func (fleet *Fleet_Spec) GetType() string {
	return "Microsoft.ContainerService/fleets"
}

// Fleet properties.
type FleetProperties struct {
	// HubProfile: The FleetHubProfile configures the Fleet's hub.
	HubProfile *FleetHubProfile `json:"hubProfile,omitempty"`
}

// Managed service identity (system assigned and/or user assigned identities)
type ManagedServiceIdentity struct {
	// Type: Type of managed service identity (where both SystemAssigned and UserAssigned types are allowed).
	Type                   *ManagedServiceIdentityType            `json:"type,omitempty"`
	UserAssignedIdentities map[string]UserAssignedIdentityDetails `json:"userAssignedIdentities,omitempty"`
}

// The FleetHubProfile configures the fleet hub.
type FleetHubProfile struct {
	// AgentProfile: The agent profile for the Fleet hub.
	AgentProfile *AgentProfile `json:"agentProfile,omitempty"`

	// ApiServerAccessProfile: The access profile for the Fleet hub API server.
	ApiServerAccessProfile *APIServerAccessProfile `json:"apiServerAccessProfile,omitempty"`

	// DnsPrefix: DNS prefix used to create the FQDN for the Fleet hub.
	DnsPrefix *string `json:"dnsPrefix,omitempty"`
}

// Type of managed service identity (where both SystemAssigned and UserAssigned types are allowed).
// +kubebuilder:validation:Enum={"None","SystemAssigned","SystemAssigned, UserAssigned","UserAssigned"}
type ManagedServiceIdentityType string

const (
	ManagedServiceIdentityType_None                       = ManagedServiceIdentityType("None")
	ManagedServiceIdentityType_SystemAssigned             = ManagedServiceIdentityType("SystemAssigned")
	ManagedServiceIdentityType_SystemAssignedUserAssigned = ManagedServiceIdentityType("SystemAssigned, UserAssigned")
	ManagedServiceIdentityType_UserAssigned               = ManagedServiceIdentityType("UserAssigned")
)

// Mapping from string to ManagedServiceIdentityType
var managedServiceIdentityType_Values = map[string]ManagedServiceIdentityType{
	"none":                         ManagedServiceIdentityType_None,
	"systemassigned":               ManagedServiceIdentityType_SystemAssigned,
	"systemassigned, userassigned": ManagedServiceIdentityType_SystemAssignedUserAssigned,
	"userassigned":                 ManagedServiceIdentityType_UserAssigned,
}

// Information about the user assigned identity for the resource
type UserAssignedIdentityDetails struct {
}

// Agent profile for the Fleet hub.
type AgentProfile struct {
	// SubnetId: The ID of the subnet which the Fleet hub node will join on startup. If this is not specified, a vnet and
	// subnet will be generated and used.
	SubnetId *string `json:"subnetId,omitempty"`

	// VmSize: The virtual machine size of the Fleet hub.
	VmSize *string `json:"vmSize,omitempty"`
}

// Access profile for the Fleet hub API server.
type APIServerAccessProfile struct {
	// EnablePrivateCluster: Whether to create the Fleet hub as a private cluster or not.
	EnablePrivateCluster *bool `json:"enablePrivateCluster,omitempty"`

	// EnableVnetIntegration: Whether to enable apiserver vnet integration for the Fleet hub or not.
	EnableVnetIntegration *bool `json:"enableVnetIntegration,omitempty"`

	// SubnetId: The subnet to be used when apiserver vnet integration is enabled. It is required when creating a new Fleet
	// with BYO vnet.
	SubnetId *string `json:"subnetId,omitempty"`
}
