// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
// Code generated by Microsoft (R) Go Code Generator. DO NOT EDIT.

package armrecommender

import "time"

// ComputeDiagnosticBase - Contains metadata of a diagnostic type
type ComputeDiagnosticBase struct {
	// Contains additional properties of a diagnostic
	Properties *DiagnosticProperties

	// READ-ONLY; Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}
	ID *string

	// READ-ONLY; The name of the resource
	Name *string

	// READ-ONLY; Azure Resource Manager metadata containing createdBy and modifiedBy information.
	SystemData *SystemData

	// READ-ONLY; The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or "Microsoft.Storage/storageAccounts"
	Type *string
}

// DiagnosticProperties - Contains additional properties of a diagnostic
type DiagnosticProperties struct {
	// Describes what are the supported resource types for a diagnostic.
	SupportedResourceTypes []*string
}

// Operation - REST API Operation
//
// Details of a REST API operation, returned from the Resource Provider Operations API
type Operation struct {
	// Localized display information for this particular operation.
	Display *OperationDisplay

	// READ-ONLY; Extensible enum. Indicates the action type. "Internal" refers to actions that are for internal only APIs.
	ActionType *ActionType

	// READ-ONLY; Whether the operation applies to data-plane. This is "true" for data-plane operations and "false" for Azure
	// Resource Manager/control-plane operations.
	IsDataAction *bool

	// READ-ONLY; The name of the operation, as per Resource-Based Access Control (RBAC). Examples: "Microsoft.Compute/virtualMachines/write",
	// "Microsoft.Compute/virtualMachines/capture/action"
	Name *string

	// READ-ONLY; The intended executor of the operation; as in Resource Based Access Control (RBAC) and audit logs UX. Default
	// value is "user,system"
	Origin *Origin
}

// OperationDisplay - Localized display information for an operation.
type OperationDisplay struct {
	// READ-ONLY; The short, localized friendly description of the operation; suitable for tool tips and detailed views.
	Description *string

	// READ-ONLY; The concise, localized friendly name for the operation; suitable for dropdowns. E.g. "Create or Update Virtual
	// Machine", "Restart Virtual Machine".
	Operation *string

	// READ-ONLY; The localized friendly form of the resource provider name, e.g. "Microsoft Monitoring Insights" or "Microsoft
	// Compute".
	Provider *string

	// READ-ONLY; The localized friendly name of the resource type related to this operation. E.g. "Virtual Machines" or "Job
	// Schedule Collections".
	Resource *string
}

// OperationListResult - A list of REST API operations supported by an Azure Resource Provider. It contains an URL link to
// get the next set of results.
type OperationListResult struct {
	// REQUIRED; The Operation items on this page
	Value []*Operation

	// The link to the next page of items
	NextLink *string
}

// PlacementScore - The spot placement score for sku/region/zone combination.
type PlacementScore struct {
	// The availability zone.
	AvailabilityZone *string

	// Whether the desired quota is available.
	IsQuotaAvailable *bool

	// The region.
	Region *string

	// The resource's CRP virtual machine SKU size.
	SKU *string

	// A placement score indicating the likelihood of successfully allocating the specified Spot VM(s), as well as the expected
	// lifetimes of the Spot VM(s) after allocation.
	Score *string
}

// ResourceSize - SpotPlacementRecommender API response.
type ResourceSize struct {
	// The resource's CRP virtual machine SKU size.
	SKU *string
}

// SKUMixPlacementBase - Contains metadata of the SkuMixPlacement scoring resource
type SKUMixPlacementBase struct {
	// The resource-specific properties for this resource.
	Properties *SKUMixPlacementProperties

	// READ-ONLY; Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}
	ID *string

	// READ-ONLY; The name of the resource
	Name *string

	// READ-ONLY; Azure Resource Manager metadata containing createdBy and modifiedBy information.
	SystemData *SystemData

	// READ-ONLY; The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or "Microsoft.Storage/storageAccounts"
	Type *string
}

// SKUMixPlacementCapacityProfile - Capacity-related properties for the placement request.
type SKUMixPlacementCapacityProfile struct {
	// REQUIRED; The capacity to run the workload. For VMs: [1..10,000]. For vCPUs: [1..100,000].
	Capacity *int32

	// REQUIRED; The unit type for the capacity value.
	CapacityType *SKUMixPlacementCapacityType

	// REQUIRED; The priority of the VMs to allocate.
	Priority *SKUMixPlacementPriority

	// The allocation strategy for determining the optimal SKU split.
	AllocationStrategy *SKUMixPlacementAllocationStrategy

	// The OS type. Required when allocationStrategy is LowestPrice because pricing varies by OS.
	OSType *SKUMixPlacementOSType

	// Required when priority is Spot. Contains spot-specific configuration.
	SpotPriorityProfile *SKUMixPlacementSpotPriorityProfile

	// Zone allocation policy. Default: BestEffortBalanced.
	ZoneAllocationPolicy *SKUMixPlacementZoneAllocationPolicy
}

// SKUMixPlacementDeploymentChoice - A single deployment choice recommendation.
type SKUMixPlacementDeploymentChoice struct {
	// REQUIRED; Unique identifier for this deployment choice.
	ID *string

	// REQUIRED; The list of VM size / zone allocations that make up this deployment choice.
	SKUSplit []*SKUMixPlacementItem

	// REQUIRED; Placement score from 0 to 9 (inclusive). Higher is better.
	Score *int32
}

// SKUMixPlacementInstanceDescription - Describes which VM sizes to consider.
type SKUMixPlacementInstanceDescription struct {
	// REQUIRED; The list of VM sizes to consider for placement.
	VMSizes []*SKUMixPlacementVMSize
}

// SKUMixPlacementItem - A single VM size allocation within a deployment choice.
type SKUMixPlacementItem struct {
	// REQUIRED; Lower range of recommended allocation capacity.
	Capacity *int32

	// REQUIRED; VM size name (e.g. Standard_D2s_v3).
	Name *string

	// REQUIRED; Priority of this allocation (Regular or Spot).
	Priority *SKUMixPlacementPriority

	// Upper range of recommended allocation capacity.
	CapacityMax *int32

	// Logical zone (e.g. "1", "2", "3"). Omitted or empty for regional deployments.
	Zone *string
}

// SKUMixPlacementProperties - Contains properties of the SkuMixPlacement resource.
type SKUMixPlacementProperties struct {
	// Describes what resource types are supported by the mix placement scoring service.
	SupportedResourceTypes []*string
}

// SKUMixPlacementRequest - Sku Mix Placement API request.
type SKUMixPlacementRequest struct {
	// REQUIRED; All capacity-related properties.
	CapacityProfile *SKUMixPlacementCapacityProfile

	// REQUIRED; Describes how the service should choose candidate VM sizes.
	InstanceDescription *SKUMixPlacementInstanceDescription

	// Optional logical zones to consider (e.g. ["1","2","3"]). Omitted or empty implies regional deployment.
	Zones []*string
}

// SKUMixPlacementResponse - Sku Mix Placement API response.
type SKUMixPlacementResponse struct {
	// REQUIRED; Indicates whether the response is a complete or partial fulfillment.
	PartialFulfillmentReason *SKUMixPlacementPartialFulfillmentReason

	// REQUIRED; List of placement choice recommendations.
	PlacementChoices []*SKUMixPlacementDeploymentChoice

	// Date/time until which the recommendations are valid. Callers should request fresh recommendations after this time.
	ValidUntil *time.Time
}

// SKUMixPlacementSpotPriorityProfile - Spot priority configuration. Required when priority is Spot.
type SKUMixPlacementSpotPriorityProfile struct {
	// Maximum price per VM the customer is willing to pay. Default: -1 (no price restriction).
	MaxPricePerVM *float64
}

// SKUMixPlacementVMSize - A VM size with optional rank for prioritization.
type SKUMixPlacementVMSize struct {
	// REQUIRED; SKU name (e.g. Standard_D2s_v3).
	Name *string

	// Rank of the VM size. Lower = higher priority (starting at 0). Only valid with Prioritized strategy.
	Rank *int32
}

// SKUMixPlacementZoneAllocationPolicy - Zone allocation policy for the placement request.
type SKUMixPlacementZoneAllocationPolicy struct {
	// Distribution strategy for allocating capacity across zones.
	DistributionStrategy *SKUMixPlacementZonalDistributionStrategy

	// Per-zone allocation preferences. Used with the Prioritized strategy.
	ZonePreferences []*SKUMixPlacementZonePreference
}

// SKUMixPlacementZonePreference - Per-zone allocation preference.
type SKUMixPlacementZonePreference struct {
	// REQUIRED; Logical zone (e.g. "1", "2", "3").
	Zone *string

	// Rank of the zone. Lower values = higher priority (0 is highest).
	Rank *int32

	// Best-effort limit to avoid allocating more than this count within the zone. Used with the Prioritized strategy.
	TargetMaxCapacity *int32
}

// SpotPlacementScoresInput - SpotPlacementScores API Input.
type SpotPlacementScoresInput struct {
	// Defines if the scope is zonal or regional.
	AvailabilityZones *bool

	// Desired instance count per region/zone based on the scope.
	DesiredCount *int32

	// The desired regions
	DesiredLocations []*string

	// The desired virtual machine SKU sizes.
	DesiredSizes []*ResourceSize
}

// SpotPlacementScoresResponse - SpotPlacementScores API response.
type SpotPlacementScoresResponse struct {
	// Defines if the scope is zonal or regional.
	AvailabilityZones *bool

	// Desired instance count per region/zone based on the scope.
	DesiredCount *int32

	// The desired regions
	DesiredLocations []*string

	// The desired virtual machine SKU sizes.
	DesiredSizes []*ResourceSize

	// A placement score indicating the likelihood of successfully allocating the specified Spot VM(s), as well as the expected
	// lifetimes of the Spot VM(s) after allocation.
	PlacementScores []*PlacementScore
}

// SystemData - Metadata pertaining to creation and last modification of the resource.
type SystemData struct {
	// The timestamp of resource creation (UTC).
	CreatedAt *time.Time

	// The identity that created the resource.
	CreatedBy *string

	// The type of identity that created the resource.
	CreatedByType *CreatedByType

	// The timestamp of resource last modification (UTC)
	LastModifiedAt *time.Time

	// The identity that last modified the resource.
	LastModifiedBy *string

	// The type of identity that last modified the resource.
	LastModifiedByType *CreatedByType
}
