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

import (
	"github.com/Azure/azure-service-operator/v2/pkg/genruntime"
	"github.com/Azure/azure-service-operator/v2/pkg/genruntime/conditions"
	"github.com/Azure/azure-service-operator/v2/pkg/genruntime/configmaps"
	"github.com/Azure/azure-service-operator/v2/pkg/genruntime/core"
	"github.com/Azure/azure-service-operator/v2/pkg/genruntime/secrets"
	"github.com/rotisserie/eris"
	"k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
	"k8s.io/apimachinery/pkg/runtime/schema"
)

// +kubebuilder:rbac:groups=cognitiveservices.azure.com,resources=accounts,verbs=get;list;watch;create;update;patch;delete
// +kubebuilder:rbac:groups=cognitiveservices.azure.com,resources={accounts/status,accounts/finalizers},verbs=get;update;patch

// +kubebuilder:object:root=true
// +kubebuilder:resource:categories={azure,cognitiveservices}
// +kubebuilder:subresource:status
// +kubebuilder:storageversion
// +kubebuilder:printcolumn:name="Ready",type="string",JSONPath=".status.conditions[?(@.type=='Ready')].status"
// +kubebuilder:printcolumn:name="Severity",type="string",JSONPath=".status.conditions[?(@.type=='Ready')].severity"
// +kubebuilder:printcolumn:name="Reason",type="string",JSONPath=".status.conditions[?(@.type=='Ready')].reason"
// +kubebuilder:printcolumn:name="Message",type="string",JSONPath=".status.conditions[?(@.type=='Ready')].message"
// Storage version of v1api20250601.Account
// Generator information:
// - Generated from: /cognitiveservices/resource-manager/Microsoft.CognitiveServices/stable/2025-06-01/cognitiveservices.json
// - ARM URI: /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CognitiveServices/accounts/{accountName}
type Account struct {
	metav1.TypeMeta   `json:",inline"`
	metav1.ObjectMeta `json:"metadata,omitempty"`
	Spec              Account_Spec   `json:"spec,omitempty"`
	Status            Account_STATUS `json:"status,omitempty"`
}

var _ conditions.Conditioner = &Account{}

// GetConditions returns the conditions of the resource
func (account *Account) GetConditions() conditions.Conditions {
	return account.Status.Conditions
}

// SetConditions sets the conditions on the resource status
func (account *Account) SetConditions(conditions conditions.Conditions) {
	account.Status.Conditions = conditions
}

var _ configmaps.Exporter = &Account{}

// ConfigMapDestinationExpressions returns the Spec.OperatorSpec.ConfigMapExpressions property
func (account *Account) ConfigMapDestinationExpressions() []*core.DestinationExpression {
	if account.Spec.OperatorSpec == nil {
		return nil
	}
	return account.Spec.OperatorSpec.ConfigMapExpressions
}

var _ secrets.Exporter = &Account{}

// SecretDestinationExpressions returns the Spec.OperatorSpec.SecretExpressions property
func (account *Account) SecretDestinationExpressions() []*core.DestinationExpression {
	if account.Spec.OperatorSpec == nil {
		return nil
	}
	return account.Spec.OperatorSpec.SecretExpressions
}

var _ genruntime.KubernetesResource = &Account{}

// AzureName returns the Azure name of the resource
func (account *Account) AzureName() string {
	return account.Spec.AzureName
}

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

// GetResourceScope returns the scope of the resource
func (account *Account) GetResourceScope() genruntime.ResourceScope {
	return genruntime.ResourceScopeResourceGroup
}

// GetSpec returns the specification of this resource
func (account *Account) GetSpec() genruntime.ConvertibleSpec {
	return &account.Spec
}

// GetStatus returns the status of this resource
func (account *Account) GetStatus() genruntime.ConvertibleStatus {
	return &account.Status
}

// GetSupportedOperations returns the operations supported by the resource
func (account *Account) GetSupportedOperations() []genruntime.ResourceOperation {
	return []genruntime.ResourceOperation{
		genruntime.ResourceOperationDelete,
		genruntime.ResourceOperationGet,
		genruntime.ResourceOperationPut,
	}
}

// GetType returns the ARM Type of the resource. This is always "Microsoft.CognitiveServices/accounts"
func (account *Account) GetType() string {
	return "Microsoft.CognitiveServices/accounts"
}

// NewEmptyStatus returns a new empty (blank) status
func (account *Account) NewEmptyStatus() genruntime.ConvertibleStatus {
	return &Account_STATUS{}
}

// Owner returns the ResourceReference of the owner
func (account *Account) Owner() *genruntime.ResourceReference {
	if account.Spec.Owner == nil {
		return nil
	}

	group, kind := genruntime.LookupOwnerGroupKind(account.Spec)
	return account.Spec.Owner.AsResourceReference(group, kind)
}

// SetStatus sets the status of this resource
func (account *Account) SetStatus(status genruntime.ConvertibleStatus) error {
	// If we have exactly the right type of status, assign it
	if st, ok := status.(*Account_STATUS); ok {
		account.Status = *st
		return nil
	}

	// Convert status to required version
	var st Account_STATUS
	err := status.ConvertStatusTo(&st)
	if err != nil {
		return eris.Wrap(err, "failed to convert status")
	}

	account.Status = st
	return nil
}

// Hub marks that this Account is the hub type for conversion
func (account *Account) Hub() {}

// OriginalGVK returns a GroupValueKind for the original API version used to create the resource
func (account *Account) OriginalGVK() *schema.GroupVersionKind {
	return &schema.GroupVersionKind{
		Group:   GroupVersion.Group,
		Version: account.Spec.OriginalVersion,
		Kind:    "Account",
	}
}

// +kubebuilder:object:root=true
// Storage version of v1api20250601.Account
// Generator information:
// - Generated from: /cognitiveservices/resource-manager/Microsoft.CognitiveServices/stable/2025-06-01/cognitiveservices.json
// - ARM URI: /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CognitiveServices/accounts/{accountName}
type AccountList struct {
	metav1.TypeMeta `json:",inline"`
	metav1.ListMeta `json:"metadata,omitempty"`
	Items           []Account `json:"items"`
}

// Storage version of v1api20250601.Account_Spec
type Account_Spec struct {
	// AzureName: The name of the resource in Azure. This is often the same as the name of the resource in Kubernetes but it
	// doesn't have to be.
	AzureName       string               `json:"azureName,omitempty"`
	Identity        *Identity            `json:"identity,omitempty"`
	Kind            *string              `json:"kind,omitempty"`
	Location        *string              `json:"location,omitempty"`
	OperatorSpec    *AccountOperatorSpec `json:"operatorSpec,omitempty"`
	OriginalVersion string               `json:"originalVersion,omitempty"`

	// +kubebuilder:validation:Required
	// Owner: The owner of the resource. The owner controls where the resource goes when it is deployed. The owner also
	// controls the resources lifecycle. When the owner is deleted the resource will also be deleted. Owner is expected to be a
	// reference to a resources.azure.com/ResourceGroup resource
	Owner       *genruntime.KnownResourceReference `group:"resources.azure.com" json:"owner,omitempty" kind:"ResourceGroup"`
	Properties  *AccountProperties                 `json:"properties,omitempty"`
	PropertyBag genruntime.PropertyBag             `json:"$propertyBag,omitempty"`
	Sku         *Sku                               `json:"sku,omitempty"`
	Tags        map[string]string                  `json:"tags,omitempty"`
}

var _ genruntime.ConvertibleSpec = &Account_Spec{}

// ConvertSpecFrom populates our Account_Spec from the provided source
func (account *Account_Spec) ConvertSpecFrom(source genruntime.ConvertibleSpec) error {
	if source == account {
		return eris.New("attempted conversion between unrelated implementations of github.com/Azure/azure-service-operator/v2/pkg/genruntime/ConvertibleSpec")
	}

	return source.ConvertSpecTo(account)
}

// ConvertSpecTo populates the provided destination from our Account_Spec
func (account *Account_Spec) ConvertSpecTo(destination genruntime.ConvertibleSpec) error {
	if destination == account {
		return eris.New("attempted conversion between unrelated implementations of github.com/Azure/azure-service-operator/v2/pkg/genruntime/ConvertibleSpec")
	}

	return destination.ConvertSpecFrom(account)
}

// Storage version of v1api20250601.Account_STATUS
// Cognitive Services account is an Azure resource representing the provisioned account, it's type, location and SKU.
type Account_STATUS struct {
	Conditions  []conditions.Condition    `json:"conditions,omitempty"`
	Etag        *string                   `json:"etag,omitempty"`
	Id          *string                   `json:"id,omitempty"`
	Identity    *Identity_STATUS          `json:"identity,omitempty"`
	Kind        *string                   `json:"kind,omitempty"`
	Location    *string                   `json:"location,omitempty"`
	Name        *string                   `json:"name,omitempty"`
	Properties  *AccountProperties_STATUS `json:"properties,omitempty"`
	PropertyBag genruntime.PropertyBag    `json:"$propertyBag,omitempty"`
	Sku         *Sku_STATUS               `json:"sku,omitempty"`
	SystemData  *SystemData_STATUS        `json:"systemData,omitempty"`
	Tags        map[string]string         `json:"tags,omitempty"`
	Type        *string                   `json:"type,omitempty"`
}

var _ genruntime.ConvertibleStatus = &Account_STATUS{}

// ConvertStatusFrom populates our Account_STATUS from the provided source
func (account *Account_STATUS) ConvertStatusFrom(source genruntime.ConvertibleStatus) error {
	if source == account {
		return eris.New("attempted conversion between unrelated implementations of github.com/Azure/azure-service-operator/v2/pkg/genruntime/ConvertibleStatus")
	}

	return source.ConvertStatusTo(account)
}

// ConvertStatusTo populates the provided destination from our Account_STATUS
func (account *Account_STATUS) ConvertStatusTo(destination genruntime.ConvertibleStatus) error {
	if destination == account {
		return eris.New("attempted conversion between unrelated implementations of github.com/Azure/azure-service-operator/v2/pkg/genruntime/ConvertibleStatus")
	}

	return destination.ConvertStatusFrom(account)
}

// Storage version of v1api20250601.APIVersion
// +kubebuilder:validation:Enum={"2025-06-01"}
type APIVersion string

const APIVersion_Value = APIVersion("2025-06-01")

// Storage version of v1api20250601.AccountOperatorSpec
// Details for configuring operator behavior. Fields in this struct are interpreted by the operator directly rather than being passed to Azure
type AccountOperatorSpec struct {
	ConfigMapExpressions []*core.DestinationExpression `json:"configMapExpressions,omitempty"`
	PropertyBag          genruntime.PropertyBag        `json:"$propertyBag,omitempty"`
	SecretExpressions    []*core.DestinationExpression `json:"secretExpressions,omitempty"`
	Secrets              *AccountOperatorSecrets       `json:"secrets,omitempty"`
}

// Storage version of v1api20250601.AccountProperties
// Properties of Cognitive Services account.
type AccountProperties struct {
	AllowProjectManagement        *bool                       `json:"allowProjectManagement,omitempty"`
	AllowedFqdnList               []string                    `json:"allowedFqdnList,omitempty"`
	AmlWorkspace                  *UserOwnedAmlWorkspace      `json:"amlWorkspace,omitempty"`
	ApiProperties                 *ApiProperties              `json:"apiProperties,omitempty"`
	AssociatedProjects            []string                    `json:"associatedProjects,omitempty"`
	CustomSubDomainName           *string                     `json:"customSubDomainName,omitempty"`
	DefaultProject                *string                     `json:"defaultProject,omitempty"`
	DisableLocalAuth              *bool                       `json:"disableLocalAuth,omitempty"`
	DynamicThrottlingEnabled      *bool                       `json:"dynamicThrottlingEnabled,omitempty"`
	Encryption                    *Encryption                 `json:"encryption,omitempty"`
	Locations                     *MultiRegionSettings        `json:"locations,omitempty"`
	MigrationToken                *genruntime.SecretReference `json:"migrationToken,omitempty"`
	NetworkAcls                   *NetworkRuleSet             `json:"networkAcls,omitempty"`
	NetworkInjections             []NetworkInjection          `json:"networkInjections,omitempty"`
	PropertyBag                   genruntime.PropertyBag      `json:"$propertyBag,omitempty"`
	PublicNetworkAccess           *string                     `json:"publicNetworkAccess,omitempty"`
	RaiMonitorConfig              *RaiMonitorConfig           `json:"raiMonitorConfig,omitempty"`
	Restore                       *bool                       `json:"restore,omitempty"`
	RestrictOutboundNetworkAccess *bool                       `json:"restrictOutboundNetworkAccess,omitempty"`
	UserOwnedStorage              []UserOwnedStorage          `json:"userOwnedStorage,omitempty"`
}

// Storage version of v1api20250601.AccountProperties_STATUS
// Properties of Cognitive Services account.
type AccountProperties_STATUS struct {
	AbusePenalty                  *AbusePenalty_STATUS               `json:"abusePenalty,omitempty"`
	AllowProjectManagement        *bool                              `json:"allowProjectManagement,omitempty"`
	AllowedFqdnList               []string                           `json:"allowedFqdnList,omitempty"`
	AmlWorkspace                  *UserOwnedAmlWorkspace_STATUS      `json:"amlWorkspace,omitempty"`
	ApiProperties                 *ApiProperties_STATUS              `json:"apiProperties,omitempty"`
	AssociatedProjects            []string                           `json:"associatedProjects,omitempty"`
	CallRateLimit                 *CallRateLimit_STATUS              `json:"callRateLimit,omitempty"`
	Capabilities                  []SkuCapability_STATUS             `json:"capabilities,omitempty"`
	CommitmentPlanAssociations    []CommitmentPlanAssociation_STATUS `json:"commitmentPlanAssociations,omitempty"`
	CustomSubDomainName           *string                            `json:"customSubDomainName,omitempty"`
	DateCreated                   *string                            `json:"dateCreated,omitempty"`
	DefaultProject                *string                            `json:"defaultProject,omitempty"`
	DeletionDate                  *string                            `json:"deletionDate,omitempty"`
	DisableLocalAuth              *bool                              `json:"disableLocalAuth,omitempty"`
	DynamicThrottlingEnabled      *bool                              `json:"dynamicThrottlingEnabled,omitempty"`
	Encryption                    *Encryption_STATUS                 `json:"encryption,omitempty"`
	Endpoint                      *string                            `json:"endpoint,omitempty"`
	Endpoints                     map[string]string                  `json:"endpoints,omitempty"`
	InternalId                    *string                            `json:"internalId,omitempty"`
	IsMigrated                    *bool                              `json:"isMigrated,omitempty"`
	Locations                     *MultiRegionSettings_STATUS        `json:"locations,omitempty"`
	NetworkAcls                   *NetworkRuleSet_STATUS             `json:"networkAcls,omitempty"`
	NetworkInjections             []NetworkInjection_STATUS          `json:"networkInjections,omitempty"`
	PrivateEndpointConnections    []PrivateEndpointConnection_STATUS `json:"privateEndpointConnections,omitempty"`
	PropertyBag                   genruntime.PropertyBag             `json:"$propertyBag,omitempty"`
	ProvisioningState             *string                            `json:"provisioningState,omitempty"`
	PublicNetworkAccess           *string                            `json:"publicNetworkAccess,omitempty"`
	QuotaLimit                    *QuotaLimit_STATUS                 `json:"quotaLimit,omitempty"`
	RaiMonitorConfig              *RaiMonitorConfig_STATUS           `json:"raiMonitorConfig,omitempty"`
	Restore                       *bool                              `json:"restore,omitempty"`
	RestrictOutboundNetworkAccess *bool                              `json:"restrictOutboundNetworkAccess,omitempty"`
	ScheduledPurgeDate            *string                            `json:"scheduledPurgeDate,omitempty"`
	SkuChangeInfo                 *SkuChangeInfo_STATUS              `json:"skuChangeInfo,omitempty"`
	UserOwnedStorage              []UserOwnedStorage_STATUS          `json:"userOwnedStorage,omitempty"`
}

// Storage version of v1api20250601.Identity
// Identity for the resource.
type Identity struct {
	PropertyBag            genruntime.PropertyBag        `json:"$propertyBag,omitempty"`
	Type                   *string                       `json:"type,omitempty"`
	UserAssignedIdentities []UserAssignedIdentityDetails `json:"userAssignedIdentities,omitempty"`
}

// Storage version of v1api20250601.Identity_STATUS
// Identity for the resource.
type Identity_STATUS struct {
	PrincipalId            *string                                `json:"principalId,omitempty"`
	PropertyBag            genruntime.PropertyBag                 `json:"$propertyBag,omitempty"`
	TenantId               *string                                `json:"tenantId,omitempty"`
	Type                   *string                                `json:"type,omitempty"`
	UserAssignedIdentities map[string]UserAssignedIdentity_STATUS `json:"userAssignedIdentities,omitempty"`
}

// Storage version of v1api20250601.Sku
// The resource model definition representing SKU
type Sku struct {
	Capacity    *int                   `json:"capacity,omitempty"`
	Family      *string                `json:"family,omitempty"`
	Name        *string                `json:"name,omitempty"`
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`
	Size        *string                `json:"size,omitempty"`
	Tier        *string                `json:"tier,omitempty"`
}

// Storage version of v1api20250601.Sku_STATUS
// The resource model definition representing SKU
type Sku_STATUS struct {
	Capacity    *int                   `json:"capacity,omitempty"`
	Family      *string                `json:"family,omitempty"`
	Name        *string                `json:"name,omitempty"`
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`
	Size        *string                `json:"size,omitempty"`
	Tier        *string                `json:"tier,omitempty"`
}

// Storage version of v1api20250601.SystemData_STATUS
// Metadata pertaining to creation and last modification of the resource.
type SystemData_STATUS struct {
	CreatedAt          *string                `json:"createdAt,omitempty"`
	CreatedBy          *string                `json:"createdBy,omitempty"`
	CreatedByType      *string                `json:"createdByType,omitempty"`
	LastModifiedAt     *string                `json:"lastModifiedAt,omitempty"`
	LastModifiedBy     *string                `json:"lastModifiedBy,omitempty"`
	LastModifiedByType *string                `json:"lastModifiedByType,omitempty"`
	PropertyBag        genruntime.PropertyBag `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20250601.AbusePenalty_STATUS
// The abuse penalty.
type AbusePenalty_STATUS struct {
	Action              *string                `json:"action,omitempty"`
	Expiration          *string                `json:"expiration,omitempty"`
	PropertyBag         genruntime.PropertyBag `json:"$propertyBag,omitempty"`
	RateLimitPercentage *float64               `json:"rateLimitPercentage,omitempty"`
}

// Storage version of v1api20250601.AccountOperatorSecrets
type AccountOperatorSecrets struct {
	Key1        *genruntime.SecretDestination `json:"key1,omitempty"`
	Key2        *genruntime.SecretDestination `json:"key2,omitempty"`
	PropertyBag genruntime.PropertyBag        `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20250601.ApiProperties
// The api properties for special APIs.
type ApiProperties struct {
	AadClientId                        *string                        `json:"aadClientId,omitempty" optionalConfigMapPair:"AadClientId"`
	AadClientIdFromConfig              *genruntime.ConfigMapReference `json:"aadClientIdFromConfig,omitempty" optionalConfigMapPair:"AadClientId"`
	AadTenantId                        *string                        `json:"aadTenantId,omitempty" optionalConfigMapPair:"AadTenantId"`
	AadTenantIdFromConfig              *genruntime.ConfigMapReference `json:"aadTenantIdFromConfig,omitempty" optionalConfigMapPair:"AadTenantId"`
	AdditionalProperties               map[string]v1.JSON             `json:"additionalProperties,omitempty"`
	EventHubConnectionString           *genruntime.SecretReference    `json:"eventHubConnectionString,omitempty"`
	PropertyBag                        genruntime.PropertyBag         `json:"$propertyBag,omitempty"`
	QnaAzureSearchEndpointId           *string                        `json:"qnaAzureSearchEndpointId,omitempty" optionalConfigMapPair:"QnaAzureSearchEndpointId"`
	QnaAzureSearchEndpointIdFromConfig *genruntime.ConfigMapReference `json:"qnaAzureSearchEndpointIdFromConfig,omitempty" optionalConfigMapPair:"QnaAzureSearchEndpointId"`
	QnaAzureSearchEndpointKey          *genruntime.SecretReference    `json:"qnaAzureSearchEndpointKey,omitempty"`
	QnaRuntimeEndpoint                 *string                        `json:"qnaRuntimeEndpoint,omitempty" optionalConfigMapPair:"QnaRuntimeEndpoint"`
	QnaRuntimeEndpointFromConfig       *genruntime.ConfigMapReference `json:"qnaRuntimeEndpointFromConfig,omitempty" optionalConfigMapPair:"QnaRuntimeEndpoint"`
	StatisticsEnabled                  *bool                          `json:"statisticsEnabled,omitempty"`
	StorageAccountConnectionString     *genruntime.SecretReference    `json:"storageAccountConnectionString,omitempty"`
	SuperUser                          *string                        `json:"superUser,omitempty" optionalConfigMapPair:"SuperUser"`
	SuperUserFromConfig                *genruntime.ConfigMapReference `json:"superUserFromConfig,omitempty" optionalConfigMapPair:"SuperUser"`
	WebsiteName                        *string                        `json:"websiteName,omitempty" optionalConfigMapPair:"WebsiteName"`
	WebsiteNameFromConfig              *genruntime.ConfigMapReference `json:"websiteNameFromConfig,omitempty" optionalConfigMapPair:"WebsiteName"`
}

// Storage version of v1api20250601.ApiProperties_STATUS
// The api properties for special APIs.
type ApiProperties_STATUS struct {
	AadClientId              *string                `json:"aadClientId,omitempty"`
	AadTenantId              *string                `json:"aadTenantId,omitempty"`
	AdditionalProperties     map[string]v1.JSON     `json:"additionalProperties,omitempty"`
	PropertyBag              genruntime.PropertyBag `json:"$propertyBag,omitempty"`
	QnaAzureSearchEndpointId *string                `json:"qnaAzureSearchEndpointId,omitempty"`
	QnaRuntimeEndpoint       *string                `json:"qnaRuntimeEndpoint,omitempty"`
	StatisticsEnabled        *bool                  `json:"statisticsEnabled,omitempty"`
	SuperUser                *string                `json:"superUser,omitempty"`
	WebsiteName              *string                `json:"websiteName,omitempty"`
}

// Storage version of v1api20250601.CallRateLimit_STATUS
// The call rate limit Cognitive Services account.
type CallRateLimit_STATUS struct {
	Count         *float64                `json:"count,omitempty"`
	PropertyBag   genruntime.PropertyBag  `json:"$propertyBag,omitempty"`
	RenewalPeriod *float64                `json:"renewalPeriod,omitempty"`
	Rules         []ThrottlingRule_STATUS `json:"rules,omitempty"`
}

// Storage version of v1api20250601.CommitmentPlanAssociation_STATUS
// The commitment plan association.
type CommitmentPlanAssociation_STATUS struct {
	CommitmentPlanId       *string                `json:"commitmentPlanId,omitempty"`
	CommitmentPlanLocation *string                `json:"commitmentPlanLocation,omitempty"`
	PropertyBag            genruntime.PropertyBag `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20250601.Encryption
// Properties to configure Encryption
type Encryption struct {
	KeySource          *string                `json:"keySource,omitempty"`
	KeyVaultProperties *KeyVaultProperties    `json:"keyVaultProperties,omitempty"`
	PropertyBag        genruntime.PropertyBag `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20250601.Encryption_STATUS
// Properties to configure Encryption
type Encryption_STATUS struct {
	KeySource          *string                    `json:"keySource,omitempty"`
	KeyVaultProperties *KeyVaultProperties_STATUS `json:"keyVaultProperties,omitempty"`
	PropertyBag        genruntime.PropertyBag     `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20250601.MultiRegionSettings
// The multiregion settings Cognitive Services account.
type MultiRegionSettings struct {
	PropertyBag   genruntime.PropertyBag `json:"$propertyBag,omitempty"`
	Regions       []RegionSetting        `json:"regions,omitempty"`
	RoutingMethod *string                `json:"routingMethod,omitempty"`
}

// Storage version of v1api20250601.MultiRegionSettings_STATUS
// The multiregion settings Cognitive Services account.
type MultiRegionSettings_STATUS struct {
	PropertyBag   genruntime.PropertyBag `json:"$propertyBag,omitempty"`
	Regions       []RegionSetting_STATUS `json:"regions,omitempty"`
	RoutingMethod *string                `json:"routingMethod,omitempty"`
}

// Storage version of v1api20250601.NetworkInjection
// Specifies in AI Foundry where virtual network injection occurs to secure scenarios like Agents entirely within the
// user's private network, eliminating public internet exposure while maintaining control over network configurations and
// resources.
type NetworkInjection struct {
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`
	Scenario    *string                `json:"scenario,omitempty"`

	// SubnetArmReference: Specify the subnet for which your Agent Client is injected into.
	SubnetArmReference         *genruntime.ResourceReference `armReference:"SubnetArmId" json:"subnetArmReference,omitempty"`
	UseMicrosoftManagedNetwork *bool                         `json:"useMicrosoftManagedNetwork,omitempty"`
}

// Storage version of v1api20250601.NetworkInjection_STATUS
// Specifies in AI Foundry where virtual network injection occurs to secure scenarios like Agents entirely within the
// user's private network, eliminating public internet exposure while maintaining control over network configurations and
// resources.
type NetworkInjection_STATUS struct {
	PropertyBag                genruntime.PropertyBag `json:"$propertyBag,omitempty"`
	Scenario                   *string                `json:"scenario,omitempty"`
	SubnetArmId                *string                `json:"subnetArmId,omitempty"`
	UseMicrosoftManagedNetwork *bool                  `json:"useMicrosoftManagedNetwork,omitempty"`
}

// Storage version of v1api20250601.NetworkRuleSet
// A set of rules governing the network accessibility.
type NetworkRuleSet struct {
	Bypass              *string                `json:"bypass,omitempty"`
	DefaultAction       *string                `json:"defaultAction,omitempty"`
	IpRules             []IpRule               `json:"ipRules,omitempty"`
	PropertyBag         genruntime.PropertyBag `json:"$propertyBag,omitempty"`
	VirtualNetworkRules []VirtualNetworkRule   `json:"virtualNetworkRules,omitempty"`
}

// Storage version of v1api20250601.NetworkRuleSet_STATUS
// A set of rules governing the network accessibility.
type NetworkRuleSet_STATUS struct {
	Bypass              *string                     `json:"bypass,omitempty"`
	DefaultAction       *string                     `json:"defaultAction,omitempty"`
	IpRules             []IpRule_STATUS             `json:"ipRules,omitempty"`
	PropertyBag         genruntime.PropertyBag      `json:"$propertyBag,omitempty"`
	VirtualNetworkRules []VirtualNetworkRule_STATUS `json:"virtualNetworkRules,omitempty"`
}

// Storage version of v1api20250601.PrivateEndpointConnection_STATUS
// The Private Endpoint Connection resource.
type PrivateEndpointConnection_STATUS struct {
	Id          *string                `json:"id,omitempty"`
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20250601.QuotaLimit_STATUS
type QuotaLimit_STATUS struct {
	Count         *float64                `json:"count,omitempty"`
	PropertyBag   genruntime.PropertyBag  `json:"$propertyBag,omitempty"`
	RenewalPeriod *float64                `json:"renewalPeriod,omitempty"`
	Rules         []ThrottlingRule_STATUS `json:"rules,omitempty"`
}

// Storage version of v1api20250601.RaiMonitorConfig
// Cognitive Services Rai Monitor Config.
type RaiMonitorConfig struct {
	// AdxStorageResourceReference: The storage resource Id.
	AdxStorageResourceReference *genruntime.ResourceReference `armReference:"AdxStorageResourceId" json:"adxStorageResourceReference,omitempty"`
	IdentityClientId            *string                       `json:"identityClientId,omitempty"`
	PropertyBag                 genruntime.PropertyBag        `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20250601.RaiMonitorConfig_STATUS
// Cognitive Services Rai Monitor Config.
type RaiMonitorConfig_STATUS struct {
	AdxStorageResourceId *string                `json:"adxStorageResourceId,omitempty"`
	IdentityClientId     *string                `json:"identityClientId,omitempty"`
	PropertyBag          genruntime.PropertyBag `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20250601.SkuCapability_STATUS
// SkuCapability indicates the capability of a certain feature.
type SkuCapability_STATUS struct {
	Name        *string                `json:"name,omitempty"`
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`
	Value       *string                `json:"value,omitempty"`
}

// Storage version of v1api20250601.SkuChangeInfo_STATUS
// Sku change info of account.
type SkuChangeInfo_STATUS struct {
	CountOfDowngrades              *float64               `json:"countOfDowngrades,omitempty"`
	CountOfUpgradesAfterDowngrades *float64               `json:"countOfUpgradesAfterDowngrades,omitempty"`
	LastChangeDate                 *string                `json:"lastChangeDate,omitempty"`
	PropertyBag                    genruntime.PropertyBag `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20250601.UserAssignedIdentity_STATUS
// User-assigned managed identity.
type UserAssignedIdentity_STATUS struct {
	ClientId    *string                `json:"clientId,omitempty"`
	PrincipalId *string                `json:"principalId,omitempty"`
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20250601.UserAssignedIdentityDetails
// Information about the user assigned identity for the resource
type UserAssignedIdentityDetails struct {
	PropertyBag genruntime.PropertyBag       `json:"$propertyBag,omitempty"`
	Reference   genruntime.ResourceReference `armReference:"Reference" json:"reference,omitempty"`
}

// Storage version of v1api20250601.UserOwnedAmlWorkspace
// The user owned AML account for Cognitive Services account.
type UserOwnedAmlWorkspace struct {
	IdentityClientId *string                `json:"identityClientId,omitempty"`
	PropertyBag      genruntime.PropertyBag `json:"$propertyBag,omitempty"`

	// ResourceReference: Full resource id of a AML account resource.
	ResourceReference *genruntime.ResourceReference `armReference:"ResourceId" json:"resourceReference,omitempty"`
}

// Storage version of v1api20250601.UserOwnedAmlWorkspace_STATUS
// The user owned AML account for Cognitive Services account.
type UserOwnedAmlWorkspace_STATUS struct {
	IdentityClientId *string                `json:"identityClientId,omitempty"`
	PropertyBag      genruntime.PropertyBag `json:"$propertyBag,omitempty"`
	ResourceId       *string                `json:"resourceId,omitempty"`
}

// Storage version of v1api20250601.UserOwnedStorage
// The user owned storage for Cognitive Services account.
type UserOwnedStorage struct {
	IdentityClientId *string                `json:"identityClientId,omitempty"`
	PropertyBag      genruntime.PropertyBag `json:"$propertyBag,omitempty"`

	// ResourceReference: Full resource id of a Microsoft.Storage resource.
	ResourceReference *genruntime.ResourceReference `armReference:"ResourceId" json:"resourceReference,omitempty"`
}

// Storage version of v1api20250601.UserOwnedStorage_STATUS
// The user owned storage for Cognitive Services account.
type UserOwnedStorage_STATUS struct {
	IdentityClientId *string                `json:"identityClientId,omitempty"`
	PropertyBag      genruntime.PropertyBag `json:"$propertyBag,omitempty"`
	ResourceId       *string                `json:"resourceId,omitempty"`
}

// Storage version of v1api20250601.IpRule
// A rule governing the accessibility from a specific ip address or ip range.
type IpRule struct {
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`
	Value       *string                `json:"value,omitempty"`
}

// Storage version of v1api20250601.IpRule_STATUS
// A rule governing the accessibility from a specific ip address or ip range.
type IpRule_STATUS struct {
	PropertyBag genruntime.PropertyBag `json:"$propertyBag,omitempty"`
	Value       *string                `json:"value,omitempty"`
}

// Storage version of v1api20250601.KeyVaultProperties
// Properties to configure keyVault Properties
type KeyVaultProperties struct {
	IdentityClientId *string                `json:"identityClientId,omitempty"`
	KeyName          *string                `json:"keyName,omitempty"`
	KeyVaultUri      *string                `json:"keyVaultUri,omitempty"`
	KeyVersion       *string                `json:"keyVersion,omitempty"`
	PropertyBag      genruntime.PropertyBag `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20250601.KeyVaultProperties_STATUS
// Properties to configure keyVault Properties
type KeyVaultProperties_STATUS struct {
	IdentityClientId *string                `json:"identityClientId,omitempty"`
	KeyName          *string                `json:"keyName,omitempty"`
	KeyVaultUri      *string                `json:"keyVaultUri,omitempty"`
	KeyVersion       *string                `json:"keyVersion,omitempty"`
	PropertyBag      genruntime.PropertyBag `json:"$propertyBag,omitempty"`
}

// Storage version of v1api20250601.RegionSetting
// The call rate limit Cognitive Services account.
type RegionSetting struct {
	Customsubdomain *string                `json:"customsubdomain,omitempty"`
	Name            *string                `json:"name,omitempty"`
	PropertyBag     genruntime.PropertyBag `json:"$propertyBag,omitempty"`
	Value           *float64               `json:"value,omitempty"`
}

// Storage version of v1api20250601.RegionSetting_STATUS
// The call rate limit Cognitive Services account.
type RegionSetting_STATUS struct {
	Customsubdomain *string                `json:"customsubdomain,omitempty"`
	Name            *string                `json:"name,omitempty"`
	PropertyBag     genruntime.PropertyBag `json:"$propertyBag,omitempty"`
	Value           *float64               `json:"value,omitempty"`
}

// Storage version of v1api20250601.VirtualNetworkRule
// A rule governing the accessibility from a specific virtual network.
type VirtualNetworkRule struct {
	IgnoreMissingVnetServiceEndpoint *bool                  `json:"ignoreMissingVnetServiceEndpoint,omitempty"`
	PropertyBag                      genruntime.PropertyBag `json:"$propertyBag,omitempty"`

	// +kubebuilder:validation:Required
	// Reference: Full resource id of a vnet subnet, such as
	// '/subscriptions/subid/resourceGroups/rg1/providers/Microsoft.Network/virtualNetworks/test-vnet/subnets/subnet1'.
	Reference *genruntime.ResourceReference `armReference:"Id" json:"reference,omitempty"`
	State     *string                       `json:"state,omitempty"`
}

// Storage version of v1api20250601.VirtualNetworkRule_STATUS
// A rule governing the accessibility from a specific virtual network.
type VirtualNetworkRule_STATUS struct {
	Id                               *string                `json:"id,omitempty"`
	IgnoreMissingVnetServiceEndpoint *bool                  `json:"ignoreMissingVnetServiceEndpoint,omitempty"`
	PropertyBag                      genruntime.PropertyBag `json:"$propertyBag,omitempty"`
	State                            *string                `json:"state,omitempty"`
}

func init() {
	SchemeBuilder.Register(&Account{}, &AccountList{})
}
