// 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"
	"k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
)

type Account_Spec struct {
	// Identity: Identity for the resource.
	Identity *Identity `json:"identity,omitempty"`

	// Kind: The Kind of the resource.
	Kind *string `json:"kind,omitempty"`

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

	// Properties: Properties of Cognitive Services account.
	Properties *AccountProperties `json:"properties,omitempty"`

	// Sku: The resource model definition representing SKU
	Sku *Sku `json:"sku,omitempty"`

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

var _ genruntime.ARMResourceSpec = &Account_Spec{}

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

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

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

// Properties of Cognitive Services account.
type AccountProperties struct {
	// AllowProjectManagement: Specifies whether this resource support project management as child resources, used as
	// containers for access management, data isolation and cost in AI Foundry.
	AllowProjectManagement *bool    `json:"allowProjectManagement,omitempty"`
	AllowedFqdnList        []string `json:"allowedFqdnList,omitempty"`

	// AmlWorkspace: The user owned AML account properties.
	AmlWorkspace *UserOwnedAmlWorkspace `json:"amlWorkspace,omitempty"`

	// ApiProperties: The api properties for special APIs.
	ApiProperties *ApiProperties `json:"apiProperties,omitempty"`

	// AssociatedProjects: Specifies the projects, by project name, that are associated with this resource.
	AssociatedProjects []string `json:"associatedProjects,omitempty"`

	// CustomSubDomainName: Optional subdomain name used for token-based authentication.
	CustomSubDomainName *string `json:"customSubDomainName,omitempty"`

	// DefaultProject: Specifies the project, by project name, that is targeted when data plane endpoints are called without a
	// project parameter.
	DefaultProject   *string `json:"defaultProject,omitempty"`
	DisableLocalAuth *bool   `json:"disableLocalAuth,omitempty"`

	// DynamicThrottlingEnabled: The flag to enable dynamic throttling.
	DynamicThrottlingEnabled *bool `json:"dynamicThrottlingEnabled,omitempty"`

	// Encryption: The encryption properties for this resource.
	Encryption *Encryption `json:"encryption,omitempty"`

	// Locations: The multiregion settings of Cognitive Services account.
	Locations *MultiRegionSettings `json:"locations,omitempty"`

	// MigrationToken: Resource migration token.
	MigrationToken *string `json:"migrationToken,omitempty"`

	// NetworkAcls: A collection of rules governing the accessibility from specific network locations.
	NetworkAcls       *NetworkRuleSet    `json:"networkAcls,omitempty"`
	NetworkInjections []NetworkInjection `json:"networkInjections,omitempty"`

	// PublicNetworkAccess: Whether or not public endpoint access is allowed for this account.
	PublicNetworkAccess *AccountProperties_PublicNetworkAccess `json:"publicNetworkAccess,omitempty"`

	// RaiMonitorConfig: Cognitive Services Rai Monitor Config.
	RaiMonitorConfig              *RaiMonitorConfig `json:"raiMonitorConfig,omitempty"`
	Restore                       *bool             `json:"restore,omitempty"`
	RestrictOutboundNetworkAccess *bool             `json:"restrictOutboundNetworkAccess,omitempty"`

	// UserOwnedStorage: The storage accounts for this resource.
	UserOwnedStorage []UserOwnedStorage `json:"userOwnedStorage,omitempty"`
}

// Identity for the resource.
type Identity struct {
	// Type: The identity type.
	Type                   *Identity_Type                         `json:"type,omitempty"`
	UserAssignedIdentities map[string]UserAssignedIdentityDetails `json:"userAssignedIdentities,omitempty"`
}

// The resource model definition representing SKU
type Sku struct {
	// Capacity: If the SKU supports scale out/in then the capacity integer should be included. If scale out/in is not possible
	// for the resource this may be omitted.
	Capacity *int `json:"capacity,omitempty"`

	// Family: If the service has different generations of hardware, for the same SKU, then that can be captured here.
	Family *string `json:"family,omitempty"`

	// Name: The name of the SKU. Ex - P3. It is typically a letter+number code
	Name *string `json:"name,omitempty"`

	// Size: The SKU size. When the name field is the combination of tier and some other value, this would be the standalone
	// code.
	Size *string `json:"size,omitempty"`

	// Tier: This field is required to be implemented by the Resource Provider if the service has more than one tier, but is
	// not required on a PUT.
	Tier *Sku_Tier `json:"tier,omitempty"`
}

// +kubebuilder:validation:Enum={"Disabled","Enabled"}
type AccountProperties_PublicNetworkAccess string

const (
	AccountProperties_PublicNetworkAccess_Disabled = AccountProperties_PublicNetworkAccess("Disabled")
	AccountProperties_PublicNetworkAccess_Enabled  = AccountProperties_PublicNetworkAccess("Enabled")
)

// Mapping from string to AccountProperties_PublicNetworkAccess
var accountProperties_PublicNetworkAccess_Values = map[string]AccountProperties_PublicNetworkAccess{
	"disabled": AccountProperties_PublicNetworkAccess_Disabled,
	"enabled":  AccountProperties_PublicNetworkAccess_Enabled,
}

// The api properties for special APIs.
type ApiProperties struct {
	// AadClientId: (Metrics Advisor Only) The Azure AD Client Id (Application Id).
	AadClientId *string `json:"aadClientId,omitempty" optionalConfigMapPair:"AadClientId"`

	// AadTenantId: (Metrics Advisor Only) The Azure AD Tenant Id.
	AadTenantId          *string            `json:"aadTenantId,omitempty" optionalConfigMapPair:"AadTenantId"`
	AdditionalProperties map[string]v1.JSON `json:"additionalProperties,omitempty"`

	// EventHubConnectionString: (Personalization Only) The flag to enable statistics of Bing Search.
	EventHubConnectionString *string `json:"eventHubConnectionString,omitempty"`

	// QnaAzureSearchEndpointId: (QnAMaker Only) The Azure Search endpoint id of QnAMaker.
	QnaAzureSearchEndpointId *string `json:"qnaAzureSearchEndpointId,omitempty" optionalConfigMapPair:"QnaAzureSearchEndpointId"`

	// QnaAzureSearchEndpointKey: (QnAMaker Only) The Azure Search endpoint key of QnAMaker.
	QnaAzureSearchEndpointKey *string `json:"qnaAzureSearchEndpointKey,omitempty"`

	// QnaRuntimeEndpoint: (QnAMaker Only) The runtime endpoint of QnAMaker.
	QnaRuntimeEndpoint *string `json:"qnaRuntimeEndpoint,omitempty" optionalConfigMapPair:"QnaRuntimeEndpoint"`

	// StatisticsEnabled: (Bing Search Only) The flag to enable statistics of Bing Search.
	StatisticsEnabled *bool `json:"statisticsEnabled,omitempty"`

	// StorageAccountConnectionString: (Personalization Only) The storage account connection string.
	StorageAccountConnectionString *string `json:"storageAccountConnectionString,omitempty"`

	// SuperUser: (Metrics Advisor Only) The super user of Metrics Advisor.
	SuperUser *string `json:"superUser,omitempty" optionalConfigMapPair:"SuperUser"`

	// WebsiteName: (Metrics Advisor Only) The website name of Metrics Advisor.
	WebsiteName *string `json:"websiteName,omitempty" optionalConfigMapPair:"WebsiteName"`
}

// Properties to configure Encryption
type Encryption struct {
	// KeySource: Enumerates the possible value of keySource for Encryption
	KeySource *Encryption_KeySource `json:"keySource,omitempty"`

	// KeyVaultProperties: Properties of KeyVault
	KeyVaultProperties *KeyVaultProperties `json:"keyVaultProperties,omitempty"`
}

// +kubebuilder:validation:Enum={"None","SystemAssigned","SystemAssigned, UserAssigned","UserAssigned"}
type Identity_Type string

const (
	Identity_Type_None                       = Identity_Type("None")
	Identity_Type_SystemAssigned             = Identity_Type("SystemAssigned")
	Identity_Type_SystemAssignedUserAssigned = Identity_Type("SystemAssigned, UserAssigned")
	Identity_Type_UserAssigned               = Identity_Type("UserAssigned")
)

// Mapping from string to Identity_Type
var identity_Type_Values = map[string]Identity_Type{
	"none":                         Identity_Type_None,
	"systemassigned":               Identity_Type_SystemAssigned,
	"systemassigned, userassigned": Identity_Type_SystemAssignedUserAssigned,
	"userassigned":                 Identity_Type_UserAssigned,
}

// The multiregion settings Cognitive Services account.
type MultiRegionSettings struct {
	Regions []RegionSetting `json:"regions,omitempty"`

	// RoutingMethod: Multiregion routing methods.
	RoutingMethod *MultiRegionSettings_RoutingMethod `json:"routingMethod,omitempty"`
}

// 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 {
	// Scenario: Specifies what features in AI Foundry network injection applies to. Currently only supports 'agent' for agent
	// scenarios. 'none' means no network injection.
	Scenario *NetworkInjection_Scenario `json:"scenario,omitempty"`

	// SubnetArmId: Specify the subnet for which your Agent Client is injected into.
	SubnetArmId *string `json:"subnetArmId,omitempty"`

	// UseMicrosoftManagedNetwork: Boolean to enable Microsoft Managed Network for subnet delegation
	UseMicrosoftManagedNetwork *bool `json:"useMicrosoftManagedNetwork,omitempty"`
}

// A set of rules governing the network accessibility.
type NetworkRuleSet struct {
	// Bypass: Setting for trusted services.
	Bypass *NetworkRuleSet_Bypass `json:"bypass,omitempty"`

	// DefaultAction: The default action when no rule from ipRules and from virtualNetworkRules match. This is only used after
	// the bypass property has been evaluated.
	DefaultAction *NetworkRuleSet_DefaultAction `json:"defaultAction,omitempty"`

	// IpRules: The list of IP address rules.
	IpRules []IpRule `json:"ipRules,omitempty"`

	// VirtualNetworkRules: The list of virtual network rules.
	VirtualNetworkRules []VirtualNetworkRule `json:"virtualNetworkRules,omitempty"`
}

// Cognitive Services Rai Monitor Config.
type RaiMonitorConfig struct {
	// AdxStorageResourceId: The storage resource Id.
	AdxStorageResourceId *string `json:"adxStorageResourceId,omitempty"`

	// IdentityClientId: The identity client Id to access the storage.
	IdentityClientId *string `json:"identityClientId,omitempty"`
}

// +kubebuilder:validation:Enum={"Basic","Enterprise","Free","Premium","Standard"}
type Sku_Tier string

const (
	Sku_Tier_Basic      = Sku_Tier("Basic")
	Sku_Tier_Enterprise = Sku_Tier("Enterprise")
	Sku_Tier_Free       = Sku_Tier("Free")
	Sku_Tier_Premium    = Sku_Tier("Premium")
	Sku_Tier_Standard   = Sku_Tier("Standard")
)

// Mapping from string to Sku_Tier
var sku_Tier_Values = map[string]Sku_Tier{
	"basic":      Sku_Tier_Basic,
	"enterprise": Sku_Tier_Enterprise,
	"free":       Sku_Tier_Free,
	"premium":    Sku_Tier_Premium,
	"standard":   Sku_Tier_Standard,
}

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

// The user owned AML account for Cognitive Services account.
type UserOwnedAmlWorkspace struct {
	// IdentityClientId: Identity Client id of a AML account resource.
	IdentityClientId *string `json:"identityClientId,omitempty"`

	// ResourceId: Full resource id of a AML account resource.
	ResourceId *string `json:"resourceId,omitempty"`
}

// The user owned storage for Cognitive Services account.
type UserOwnedStorage struct {
	IdentityClientId *string `json:"identityClientId,omitempty"`

	// ResourceId: Full resource id of a Microsoft.Storage resource.
	ResourceId *string `json:"resourceId,omitempty"`
}

// +kubebuilder:validation:Enum={"Microsoft.CognitiveServices","Microsoft.KeyVault"}
type Encryption_KeySource string

const (
	Encryption_KeySource_MicrosoftCognitiveServices = Encryption_KeySource("Microsoft.CognitiveServices")
	Encryption_KeySource_MicrosoftKeyVault          = Encryption_KeySource("Microsoft.KeyVault")
)

// Mapping from string to Encryption_KeySource
var encryption_KeySource_Values = map[string]Encryption_KeySource{
	"microsoft.cognitiveservices": Encryption_KeySource_MicrosoftCognitiveServices,
	"microsoft.keyvault":          Encryption_KeySource_MicrosoftKeyVault,
}

// A rule governing the accessibility from a specific ip address or ip range.
type IpRule struct {
	// Value: An IPv4 address range in CIDR notation, such as '124.56.78.91' (simple IP address) or '124.56.78.0/24' (all
	// addresses that start with 124.56.78).
	Value *string `json:"value,omitempty"`
}

// Properties to configure keyVault Properties
type KeyVaultProperties struct {
	IdentityClientId *string `json:"identityClientId,omitempty"`

	// KeyName: Name of the Key from KeyVault
	KeyName *string `json:"keyName,omitempty"`

	// KeyVaultUri: Uri of KeyVault
	KeyVaultUri *string `json:"keyVaultUri,omitempty"`

	// KeyVersion: Version of the Key from KeyVault
	KeyVersion *string `json:"keyVersion,omitempty"`
}

// +kubebuilder:validation:Enum={"Performance","Priority","Weighted"}
type MultiRegionSettings_RoutingMethod string

const (
	MultiRegionSettings_RoutingMethod_Performance = MultiRegionSettings_RoutingMethod("Performance")
	MultiRegionSettings_RoutingMethod_Priority    = MultiRegionSettings_RoutingMethod("Priority")
	MultiRegionSettings_RoutingMethod_Weighted    = MultiRegionSettings_RoutingMethod("Weighted")
)

// Mapping from string to MultiRegionSettings_RoutingMethod
var multiRegionSettings_RoutingMethod_Values = map[string]MultiRegionSettings_RoutingMethod{
	"performance": MultiRegionSettings_RoutingMethod_Performance,
	"priority":    MultiRegionSettings_RoutingMethod_Priority,
	"weighted":    MultiRegionSettings_RoutingMethod_Weighted,
}

// +kubebuilder:validation:Enum={"agent","none"}
type NetworkInjection_Scenario string

const (
	NetworkInjection_Scenario_Agent = NetworkInjection_Scenario("agent")
	NetworkInjection_Scenario_None  = NetworkInjection_Scenario("none")
)

// Mapping from string to NetworkInjection_Scenario
var networkInjection_Scenario_Values = map[string]NetworkInjection_Scenario{
	"agent": NetworkInjection_Scenario_Agent,
	"none":  NetworkInjection_Scenario_None,
}

// +kubebuilder:validation:Enum={"AzureServices","None"}
type NetworkRuleSet_Bypass string

const (
	NetworkRuleSet_Bypass_AzureServices = NetworkRuleSet_Bypass("AzureServices")
	NetworkRuleSet_Bypass_None          = NetworkRuleSet_Bypass("None")
)

// Mapping from string to NetworkRuleSet_Bypass
var networkRuleSet_Bypass_Values = map[string]NetworkRuleSet_Bypass{
	"azureservices": NetworkRuleSet_Bypass_AzureServices,
	"none":          NetworkRuleSet_Bypass_None,
}

// +kubebuilder:validation:Enum={"Allow","Deny"}
type NetworkRuleSet_DefaultAction string

const (
	NetworkRuleSet_DefaultAction_Allow = NetworkRuleSet_DefaultAction("Allow")
	NetworkRuleSet_DefaultAction_Deny  = NetworkRuleSet_DefaultAction("Deny")
)

// Mapping from string to NetworkRuleSet_DefaultAction
var networkRuleSet_DefaultAction_Values = map[string]NetworkRuleSet_DefaultAction{
	"allow": NetworkRuleSet_DefaultAction_Allow,
	"deny":  NetworkRuleSet_DefaultAction_Deny,
}

// The call rate limit Cognitive Services account.
type RegionSetting struct {
	// Customsubdomain: Maps the region to the regional custom subdomain.
	Customsubdomain *string `json:"customsubdomain,omitempty"`

	// Name: Name of the region.
	Name *string `json:"name,omitempty"`

	// Value: A value for priority or weighted routing methods.
	Value *float64 `json:"value,omitempty"`
}

// A rule governing the accessibility from a specific virtual network.
type VirtualNetworkRule struct {
	// Id: Full resource id of a vnet subnet, such as
	// '/subscriptions/subid/resourceGroups/rg1/providers/Microsoft.Network/virtualNetworks/test-vnet/subnets/subnet1'.
	Id *string `json:"id,omitempty"`

	// IgnoreMissingVnetServiceEndpoint: Ignore missing vnet service endpoint or not.
	IgnoreMissingVnetServiceEndpoint *bool `json:"ignoreMissingVnetServiceEndpoint,omitempty"`

	// State: Gets the state of virtual network rule.
	State *string `json:"state,omitempty"`
}
