// 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 armadvisor

import "time"

// ARMErrorResponseBody - ARM error response body.
type ARMErrorResponseBody struct {
	// Gets or sets the string that can be used to programmatically identify the error.
	Code *string

	// Gets or sets the string that describes the error in detail and provides debugging information.
	Message *string
}

type ArmErrorResponse struct {
	// ARM error response body.
	Error *ARMErrorResponseBody
}

// AssessmentListResult - Paged collection of AssessmentResult items
type AssessmentListResult struct {
	// REQUIRED; The AssessmentResult items on this page
	Value []*AssessmentResult

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

// AssessmentResult - The Advisor assessment result data structure.
type AssessmentResult struct {
	// The Advisor assessment result properties structure.
	Properties *AssessmentResultProperties

	// 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
}

// AssessmentResultProperties - Assessment result properties.
type AssessmentResultProperties struct {
	// Assessment Type Locale.
	Locale *string

	// Assessment Type Id.
	TypeID *string

	// Workload Id.
	WorkloadID *string

	// READ-ONLY; Assessment Id.
	AssessmentID *string

	// READ-ONLY; Assessment Type Description.
	Description *string

	// READ-ONLY; Assessment Score.
	Score *int32

	// READ-ONLY; Assessment State.
	State *string

	// READ-ONLY; Assessment Type.
	Type *string

	// READ-ONLY; Assessment Type Version.
	TypeVersion *string

	// READ-ONLY; Workload Name.
	WorkloadName *string
}

// AssessmentTypeListResult - The Advisor assessment type list result data structure.
type AssessmentTypeListResult struct {
	// REQUIRED; The AssessmentTypeResult items on this page
	Value []*AssessmentTypeResult

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

// AssessmentTypeResult - The Advisor assessment type result data structure.
type AssessmentTypeResult struct {
	// Assessment Type Description
	Description *string

	// Assessment Type Id
	ID *string

	// Assessment Type Locale
	Locale *string

	// Assessment Type Title
	Title *string

	// Assessment Type Version
	Version *string
}

// ConfigData - The Advisor configuration data structure.
type ConfigData struct {
	// The Advisor configuration data structure.
	Properties *ConfigDataProperties

	// 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
}

// ConfigDataProperties - Configuration data properties
type ConfigDataProperties struct {
	// Advisor digest configuration. Valid only for subscriptions
	Digests []*DigestConfig

	// Minimum duration for Advisor low CPU utilization evaluation. Valid only for subscriptions. Valid values: 7 (default), 14,
	// 21, 30, 60 or 90.
	Duration *Duration

	// Exclude the resource from Advisor evaluations. Valid values: False (default) or True.
	Exclude *bool

	// Minimum percentage threshold for Advisor low CPU utilization evaluation. Valid only for subscriptions. Valid values: 5
	// (default), 10, 15 or 20.
	LowCPUThreshold *CPUThreshold
}

// ConfigurationListResult - Paged collection of ConfigData items
type ConfigurationListResult struct {
	// REQUIRED; The ConfigData items on this page
	Value []*ConfigData

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

// DigestConfig - Advisor Digest configuration entity
type DigestConfig struct {
	// Action group resource id used by digest.
	ActionGroupResourceID *string

	// Categories to send digest for. If categories are not provided, then digest will be sent for all categories.
	Categories []*Category

	// Frequency that digest will be triggered, in days. Value must be between 7 and 30 days inclusive.
	Frequency *int32

	// Language for digest content body. Value must be ISO 639-1 code for one of Azure portal supported languages. Otherwise,
	// it will be converted into one. Default value is English (en).
	Language *string

	// Name of digest configuration. Value is case-insensitive and must be unique within a subscription.
	Name *string

	// State of digest configuration.
	State *DigestConfigState
}

// MetadataEntity - The metadata entity contract.
type MetadataEntity struct {
	// The metadata entity properties.
	Properties *MetadataEntityProperties

	// 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
}

// MetadataEntityListResult - The response of a MetadataEntity list operation.
type MetadataEntityListResult struct {
	// REQUIRED; The MetadataEntity items on this page
	Value []*MetadataEntity

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

// MetadataEntityProperties - The metadata entity properties
type MetadataEntityProperties struct {
	// The list of scenarios applicable to this metadata entity.
	ApplicableScenarios []*Scenario

	// The list of keys on which this entity depends on.
	DependsOn []*string

	// The display name.
	DisplayName *string

	// The list of supported values.
	SupportedValues []*MetadataSupportedValueDetail
}

// MetadataSupportedValueDetail - The metadata supported value detail.
type MetadataSupportedValueDetail struct {
	// The display name.
	DisplayName *string

	// The id.
	ID *string
}

// OperationDisplayInfo - The operation supported by Advisor.
type OperationDisplayInfo struct {
	// The description of the operation.
	Description *string

	// The action that users can perform, based on their permission level.
	Operation *string

	// Service provider: Microsoft Advisor.
	Provider *string

	// Resource on which the operation is performed.
	Resource *string
}

// OperationEntity - The operation supported by Advisor.
type OperationEntity struct {
	// The operation supported by Advisor.
	Display *OperationDisplayInfo

	// Operation name: {provider}/{resource}/{operation}.
	Name *string
}

// OperationEntityListResult - Paged collection of OperationEntity items
type OperationEntityListResult struct {
	// REQUIRED; The OperationEntity items on this page
	Value []*OperationEntity

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

// PredictionRequest - Parameters for predict recommendation.
type PredictionRequest struct {
	// Request properties for prediction recommendation.
	Properties *PredictionRequestProperties
}

// PredictionRequestProperties - Properties given for the predictor.
type PredictionRequestProperties struct {
	// Extended properties are arguments specific for each prediction type.
	ExtendedProperties any

	// Type of the prediction.
	PredictionType *PredictionType
}

// PredictionResponse - Response used by predictions.
type PredictionResponse struct {
	// The properties of the prediction.
	Properties *PredictionResponseProperties
}

// PredictionResponseProperties - Properties of the prediction
type PredictionResponseProperties struct {
	// The category of the recommendation.
	Category *Category

	// Extended properties
	ExtendedProperties any

	// The business impact of the recommendation.
	Impact *Impact

	// The resource type identified by Advisor.
	ImpactedField *string

	// The most recent time that Advisor checked the validity of the recommendation.
	LastUpdated *time.Time

	// Type of the prediction.
	PredictionType *PredictionType

	// A summary of the recommendation.
	ShortDescription *ShortDescription
}

// RecommendationProperties - The properties of the recommendation.
type RecommendationProperties struct {
	// The list of recommended actions to implement recommendation.
	Actions []map[string]any

	// The category of the recommendation.
	Category *Category

	// The sub-category of the recommendation.
	Control *Control

	// The detailed description of recommendation.
	Description *string

	// The recommendation metadata properties exposed to customer to provide additional information.
	ExposedMetadataProperties map[string]any

	// Extended properties
	ExtendedProperties map[string]*string

	// The business impact of the recommendation.
	Impact *Impact

	// The resource type identified by Advisor.
	ImpactedField *string

	// The resource identified by Advisor.
	ImpactedValue *string

	// The label of recommendation.
	Label *string

	// The most recent time that Advisor checked the validity of the recommendation.
	LastUpdated *time.Time

	// The link to learn more about recommendation and generation logic.
	LearnMoreLink *string

	// The recommendation metadata.
	Metadata map[string]any

	// Additional notes for the Recommendation
	Notes *string

	// The potential benefit of implementing recommendation.
	PotentialBenefits *string

	// The recommendation-type GUID.
	RecommendationTypeID *string

	// The automated way to apply recommendation.
	Remediation map[string]any

	// Metadata of resource that was assessed
	ResourceMetadata *ResourceMetadata

	// The Workload that this Resource belongs to.
	ResourceWorkload *RecommendationPropertiesResourceWorkload

	// The Review that this Recommendation belongs to.
	Review *RecommendationPropertiesReview

	// The potential risk of not implementing the recommendation.
	Risk *Risk

	// A summary of the recommendation.
	ShortDescription *ShortDescription

	// The Source System that this Recommendation originated from.
	SourceSystem *string

	// The list of snoozed and dismissed rules for the recommendation.
	SuppressionIDs []*string

	// If the Recommendation has Tracking enabled.
	Tracked *bool

	// The properties of a tracked recommendation.
	TrackedProperties *TrackedRecommendationProperties
}

// RecommendationPropertiesResourceWorkload - The Workload that this Resource belongs to.
type RecommendationPropertiesResourceWorkload struct {
	// The Id of the Workload
	ID *string

	// The Name of the Workload
	Name *string
}

// RecommendationPropertiesReview - The Review that this Recommendation belongs to.
type RecommendationPropertiesReview struct {
	// The ARM Resource Id of the Review
	ID *string

	// The Name of the Review
	Name *string
}

// RecommendationRejectBody - Recommendation reject body.
type RecommendationRejectBody struct {
	// Reason for rejecting recommendation.
	ReasonForRejection *ReasonForRejectionName
}

// ResiliencyReview - The Advisor resiliency review data structure.
type ResiliencyReview struct {
	// Advisor resiliency review properties.
	Properties *ResiliencyReviewProperties

	// 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
}

// ResiliencyReviewCollection - Collection of Resiliency Reviews.
type ResiliencyReviewCollection struct {
	// REQUIRED; The ResiliencyReview items on this page
	Value []*ResiliencyReview

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

// ResiliencyReviewProperties - Resiliency review properties.
type ResiliencyReviewProperties struct {
	// READ-ONLY; Review last updated timestamp.
	PublishedAt *string

	// READ-ONLY; Review recommendations count.
	RecommendationsCount *int32

	// READ-ONLY; Review name.
	ReviewName *string

	// READ-ONLY; Review status.
	ReviewStatus *ReviewStatus

	// READ-ONLY; Review last updated timestamp.
	UpdatedAt *string

	// READ-ONLY; Workload Name.
	WorkloadName *string
}

// ResourceMetadata - Recommendation resource metadata
type ResourceMetadata struct {
	// The action to view resource.
	Action map[string]any

	// The plural user friendly name of resource type. eg: virtual machines
	Plural *string

	// Azure resource Id of the assessed resource
	ResourceID *string

	// The singular user friendly name of resource type. eg: virtual machine
	Singular *string

	// Source from which recommendation is generated
	Source *string
}

// ResourceRecommendationBase - Advisor Recommendation.
type ResourceRecommendationBase struct {
	// The properties of the recommendation.
	Properties *RecommendationProperties

	// 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
}

// ResourceRecommendationBaseListResult - The response of a ResourceRecommendationBase list operation.
type ResourceRecommendationBaseListResult struct {
	// REQUIRED; The ResourceRecommendationBase items on this page
	Value []*ResourceRecommendationBase

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

// ScoreEntity - The details of Advisor Score
type ScoreEntity struct {
	// The consumption units for the score.
	ConsumptionUnits *float32

	// The date score was calculated.
	Date *string

	// The number of impacted resources.
	ImpactedResourceCount *float32

	// The potential percentage increase in overall score at subscription level once all recommendations in this scope are implemented.
	PotentialScoreIncrease *float32

	// The percentage score.
	Score *float32

	// READ-ONLY; The count of impacted categories.
	CategoryCount *float32
}

// ScoreEntityForAdvisor - The details of Advisor score for a single category.
type ScoreEntityForAdvisor struct {
	// The Advisor score data.
	Properties *ScoreEntityProperties

	// 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
}

// ScoreEntityProperties - The Advisor score data.
type ScoreEntityProperties struct {
	// The details of latest available score.
	LastRefreshedScore *ScoreEntity

	// The historic Advisor score data.
	TimeSeries []*TimeSeriesEntity
}

type ScoreResponse struct {
	// The list of operations.
	Value []*ScoreEntityForAdvisor
}

// ShortDescription - A summary of the recommendation.
type ShortDescription struct {
	// The issue or opportunity identified by the recommendation and proposed solution.
	Problem *string

	// The issue or opportunity identified by the recommendation and proposed solution.
	Solution *string
}

// SuppressionContract - The details of the snoozed or dismissed rule; for example, the duration, name, and GUID associated
// with the rule.
type SuppressionContract struct {
	// The properties of the suppression.
	Properties *SuppressionProperties

	// 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
}

// SuppressionContractListResult - The response of a SuppressionContract list operation.
type SuppressionContractListResult struct {
	// REQUIRED; The SuppressionContract items on this page
	Value []*SuppressionContract

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

// SuppressionProperties - The properties of the suppression.
type SuppressionProperties struct {
	// The GUID of the suppression.
	SuppressionID *string

	// The duration for which the suppression is valid.
	TTL *string

	// READ-ONLY; Gets or sets the expiration time stamp.
	ExpirationTimeStamp *time.Time
}

// 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
}

// TimeSeriesEntity - The historic data at different aggregation levels.
type TimeSeriesEntity struct {
	// The aggregation level of the score.
	AggregationLevel *Aggregated

	// The past score data
	ScoreHistory []*ScoreEntity
}

// TrackedRecommendationProperties - The tracked properties of a Recommendation
type TrackedRecommendationProperties struct {
	// The time the Recommendation was postponed until.
	PostponedTime *time.Time

	// The Priority of the Recommendation.
	Priority *Priority

	// The reason the state of the Recommendation was changed.
	Reason *Reason

	// The state of the Recommendation
	State *State
}

type TrackedRecommendationPropertiesPayload struct {
	Properties *TrackedRecommendationPropertiesPayloadProperties
}

type TrackedRecommendationPropertiesPayloadProperties struct {
	// The tracked properties of a Recommendation
	TrackedProperties *TrackedRecommendationProperties
}

// TriageRecommendation - Triage recommendation data structure.
type TriageRecommendation struct {
	// Advisor resiliency review properties.
	Properties *TriageRecommendationProperties

	// 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
}

// TriageRecommendationCollection - Collection of Advisor triage recommendations.
type TriageRecommendationCollection struct {
	// REQUIRED; List of triage recommendations.
	Value []*TriageRecommendation

	// The URL to get the next set of triage recommendations, if there are any.
	NextLink *string
}

// TriageRecommendationProperties - Triage recommendation properties.
type TriageRecommendationProperties struct {
	// READ-ONLY; List of subscription ids.
	AppliesToSubscriptions []*string

	// READ-ONLY; Recommendation description.
	Description *string

	// READ-ONLY; Recommendation notes.
	Notes *string

	// READ-ONLY; Recommendation potential benefit.
	PotentialBenefits *string

	// READ-ONLY; Recommendation priority.
	Priority *PriorityName

	// READ-ONLY; Recommendation status.
	RecommendationStatus *RecommendationStatusName

	// READ-ONLY; Recommendation rejection reason.
	RejectReason *string

	// READ-ONLY; Review id.
	ReviewID *string

	// READ-ONLY; Recommendation label.
	Title *string

	// READ-ONLY; Recommendation potential benefit.
	UpdatedAt *string
}

// TriageResource - Triage resource data structure.
type TriageResource struct {
	// Triage resource properties.
	Properties *TriageResourceProperties

	// 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
}

// TriageResourceCollection - Collection of Advisor triage resources.
type TriageResourceCollection struct {
	// REQUIRED; The TriageResource items on this page
	Value []*TriageResource

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

// TriageResourceProperties - Triage resource properties.
type TriageResourceProperties struct {
	// READ-ONLY; Unique identifier for the recommendation resource this triageResource belongs to.
	RecommendationID *string

	// READ-ONLY; Name of the resource group this triageResource belongs to.
	ResourceGroup *string

	// READ-ONLY; Full Azure resource id path of the resource this triageResource corresponds to.
	ResourceID *string

	// READ-ONLY; Name of the resource this triageResource corresponds to.
	ResourceName *string

	// READ-ONLY; Type of resource this triageResource corresponds to e.g. "Cosmos DB".
	ResourceType *string

	// READ-ONLY; Unique identifier for the review resource this triageResource belongs to.
	ReviewID *string

	// READ-ONLY; Unique identifier for the subscription resource this triageResource belongs to.
	SubscriptionID *string
}

// WorkloadListResult - The Workload list result data structure.
type WorkloadListResult struct {
	// REQUIRED; List of WorkloadListResult items on this page.
	Value []*WorkloadResult

	// Url to get the next Page of WorkloadListResult items.
	NextLink *string
}

// WorkloadResult - The Workload result data structure.
type WorkloadResult struct {
	// Workload Id
	ID *string

	// Workload Name
	Name *string

	// Subscription Id
	SubscriptionID *string

	// Subscription Name
	SubscriptionName *string
}
