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

import "time"

// BaseExportModel - The base export parameter
type BaseExportModel struct {
	// REQUIRED; The parameter type
	Type *Type

	// Whether to output all non-computed properties in the generated Terraform configuration? This probably needs manual modifications
	// to make it valid
	FullProperties *bool

	// Mask sensitive attributes in the Terraform configuration
	MaskSensitive *bool

	// The target Azure Terraform Provider
	TargetProvider *TargetProvider
}

// GetBaseExportModel implements the BaseExportModelClassification interface for type BaseExportModel.
func (b *BaseExportModel) GetBaseExportModel() *BaseExportModel { return b }

// ErrorAdditionalInfo - The resource management error additional info.
type ErrorAdditionalInfo struct {
	// READ-ONLY; The additional info.
	Info any

	// READ-ONLY; The additional info type.
	Type *string
}

// ErrorDetail - The error detail.
type ErrorDetail struct {
	// READ-ONLY; The error additional info.
	AdditionalInfo []*ErrorAdditionalInfo

	// READ-ONLY; The error code.
	Code *string

	// READ-ONLY; The error details.
	Details []*ErrorDetail

	// READ-ONLY; The error message.
	Message *string

	// READ-ONLY; The error target.
	Target *string
}

// ExportQuery - Export parameter for resources queried by ARG (Azure Resource Graph)
type ExportQuery struct {
	// REQUIRED; The ARG where predicate. Note that you can combine multiple conditions in one `where` predicate, e.g. `resourceGroup
	// =~ "my-rg" and type =~ "microsoft.network/virtualnetworks"`
	Query *string

	// CONSTANT; The parameter type
	// Field has constant value TypeExportQuery, any specified value is ignored.
	Type *Type

	// The ARG Scope Filter parameter
	AuthorizationScopeFilter *AuthorizationScopeFilter

	// Whether to output all non-computed properties in the generated Terraform configuration? This probably needs manual modifications
	// to make it valid
	FullProperties *bool

	// Mask sensitive attributes in the Terraform configuration
	MaskSensitive *bool

	// The name pattern of the Terraform resources
	NamePattern *string

	// Whether to recursively list child resources of the query result
	Recursive *bool

	// The ARG table name
	Table *string

	// The target Azure Terraform Provider
	TargetProvider *TargetProvider
}

// GetBaseExportModel implements the BaseExportModelClassification interface for type ExportQuery.
func (e *ExportQuery) GetBaseExportModel() *BaseExportModel {
	return &BaseExportModel{
		FullProperties: e.FullProperties,
		MaskSensitive:  e.MaskSensitive,
		TargetProvider: e.TargetProvider,
		Type:           e.Type,
	}
}

// ExportResource - Export parameter for individual resources.
type ExportResource struct {
	// REQUIRED; The id of the resource to be exported
	ResourceIDs []*string

	// CONSTANT; The parameter type
	// Field has constant value TypeExportResource, any specified value is ignored.
	Type *Type

	// Whether to output all non-computed properties in the generated Terraform configuration? This probably needs manual modifications
	// to make it valid
	FullProperties *bool

	// Mask sensitive attributes in the Terraform configuration
	MaskSensitive *bool

	// The name pattern of the Terraform resources
	NamePattern *string

	// The Terraform resource name. Only works when `resourceIds` contains only one item.
	ResourceName *string

	// The Terraform resource type. Only works when `resourceIds` contains only one item.
	ResourceType *string

	// The target Azure Terraform Provider
	TargetProvider *TargetProvider
}

// GetBaseExportModel implements the BaseExportModelClassification interface for type ExportResource.
func (e *ExportResource) GetBaseExportModel() *BaseExportModel {
	return &BaseExportModel{
		FullProperties: e.FullProperties,
		MaskSensitive:  e.MaskSensitive,
		TargetProvider: e.TargetProvider,
		Type:           e.Type,
	}
}

// ExportResourceGroup - Export parameter for a resource group
type ExportResourceGroup struct {
	// REQUIRED; The name of the resource group to be exported
	ResourceGroupName *string

	// CONSTANT; The parameter type
	// Field has constant value TypeExportResourceGroup, any specified value is ignored.
	Type *Type

	// Whether to output all non-computed properties in the generated Terraform configuration? This probably needs manual modifications
	// to make it valid
	FullProperties *bool

	// Mask sensitive attributes in the Terraform configuration
	MaskSensitive *bool

	// The name pattern of the Terraform resources
	NamePattern *string

	// The target Azure Terraform Provider
	TargetProvider *TargetProvider
}

// GetBaseExportModel implements the BaseExportModelClassification interface for type ExportResourceGroup.
func (e *ExportResourceGroup) GetBaseExportModel() *BaseExportModel {
	return &BaseExportModel{
		FullProperties: e.FullProperties,
		MaskSensitive:  e.MaskSensitive,
		TargetProvider: e.TargetProvider,
		Type:           e.Type,
	}
}

// ExportResult - The Terraform export result
type ExportResult struct {
	// The Terraform configuration content
	Configuration *string

	// A list of errors derived during exporting each resource
	Errors []*ErrorDetail

	// The Terraform import blocks for the current export, which users can use to run "terraform plan" with to import the resources
	Import *string

	// A list of Azure resources which are not exported to Terraform due to there is no corresponding resources in Terraform
	SkippedResources []*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 and 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
}

// OperationStatus - The status of the LRO operation.
type OperationStatus struct {
	// REQUIRED; The operation status
	Status *ResourceProvisioningState

	// READ-ONLY; Operation complete time
	EndTime *time.Time

	// READ-ONLY; Errors that occurred if the operation ended with Canceled or Failed status
	Error *ErrorDetail

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

	// READ-ONLY; The progress made toward completing the operation
	PercentComplete *float64

	// READ-ONLY; RP-specific properties for the operationStatus resource, only appears when operation ended with Succeeded status
	Properties *ExportResult

	// READ-ONLY; Operation start time
	StartTime *time.Time
}
