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

import "time"

// AddressSpacesModel - Enclave Address Spaces
type AddressSpacesModel struct {
	// Enclave Address Space
	EnclaveAddressSpace *string

	// Managed Address Space
	ManagedAddressSpace *string
}

// ApprovalActionRequest - Request body for calling post-action
type ApprovalActionRequest struct {
	// REQUIRED; Approval status indicating 'Approved' or 'Rejected'
	ApprovalStatus *ApprovalActionRequestApprovalStatus
}

// ApprovalActionResponse - Response body after handling of approvalCallbackRequest
type ApprovalActionResponse struct {
	// REQUIRED; Confirmation message indicating the result of the operation.
	Message *string
}

// ApprovalCallbackRequest - Request body for calling post-action
type ApprovalCallbackRequest struct {
	// REQUIRED; Approval status indicating 'Approved' or 'Rejected'
	ApprovalStatus *ApprovalCallbackRequestApprovalStatus

	// REQUIRED; Resource request action indicating action which needed to be performed upon calling approval-callback post action
	ResourceRequestAction *ApprovalCallbackRequestResourceRequestAction

	// Payload requested by client upon approval action
	ApprovalCallbackPayload *string
}

// ApprovalDeletionCallbackRequest - Request body for calling post-action
type ApprovalDeletionCallbackRequest struct {
	// REQUIRED; Resource request action indicating action which needed to be performed upon calling approval-deletion-callback
	// post action
	ResourceRequestAction *ApprovalDeletionCallbackRequestResourceRequestAction
}

// ApprovalPatchModel - Approvals patch model.
type ApprovalPatchModel struct {
	// Approval Patch properties
	Properties *ApprovalPatchProperties
}

// ApprovalPatchProperties - Approvals patch properties.
type ApprovalPatchProperties struct {
	// REQUIRED; Request metadata for the approval request.
	RequestMetadata *RequestMetadataUpdatableProperties

	// List of approvers for the approval request
	Approvers []*Approver

	// Approval request creation time
	CreatedAt *time.Time

	// Parameter for optimizing query results
	GrandparentResourceID *string

	// Parameter for optimizing query results
	ParentResourceID *string

	// Approval request state change time, time at which approval request state changed from pending to approved or rejected.
	StateChangedAt *time.Time

	// Ticket ID for the approval request
	TicketID *string
}

// ApprovalProperties - Approval Base model.
type ApprovalProperties struct {
	// REQUIRED; Request metadata for the approval request.
	RequestMetadata *RequestMetadata

	// List of approvers for the approval request
	Approvers []*Approver

	// Approval request creation time
	CreatedAt *time.Time

	// Parameter for optimizing query results
	GrandparentResourceID *string

	// Parameter for optimizing query results
	ParentResourceID *string

	// Approval request state change time, time at which approval request state changed from pending to approved or rejected.
	StateChangedAt *time.Time

	// Ticket ID for the approval request
	TicketID *string

	// READ-ONLY; Array of Entra IDs of approvers who have approved the approval request
	ApprovedByEntraIDs []*string

	// READ-ONLY; Current count of minimum approvers required
	ApproversApprovedCount *int64

	// READ-ONLY; List of mandatory approvers for the approval request
	MandatoryApprovers []*MandatoryApprover

	// READ-ONLY; Current count of mandatory approvers that have approved
	MandatoryApproversApprovedCount *int64

	// READ-ONLY; Minimum number of approvers required for the approval request
	MinimumApproversRequired *int64

	// READ-ONLY; Provisioning State.
	ProvisioningState *ProvisioningState
}

// ApprovalResource - Approval Model Resource
type ApprovalResource struct {
	// The resource-specific properties for this resource.
	Properties *ApprovalProperties

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

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

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

// ApprovalSettingConfiguration - Granular approval setting configuration with policy, minimum approvers, and mandatory approvers.
type ApprovalSettingConfiguration struct {
	// Approval policy (Required or NotRequired).
	ApprovalPolicy *ApprovalPolicy

	// List of mandatory approvers for this approval setting.
	MandatoryApprovers []*MandatoryApprover

	// Minimum number of approvers required for this approval setting.
	MinimumApproversRequired *int32
}

// ApprovalSettings - Granular ApprovalSettings Properties for 2025-11-01-preview and later versions
type ApprovalSettings struct {
	// Approval configuration for community endpoint updates.
	CommunityEndpointUpdate *ApprovalSettingConfiguration

	// Approval configuration for community maintenance mode.
	CommunityMaintenanceMode *ApprovalSettingConfiguration

	// Approval configuration for connection creation.
	ConnectionCreation *ApprovalSettingConfiguration

	// Approval configuration for connection updates.
	ConnectionUpdate *ApprovalSettingConfiguration

	// Approval configuration for enclave creation.
	EnclaveCreation *ApprovalSettingConfiguration

	// Approval configuration for enclave endpoint updates.
	EnclaveEndpointUpdate *ApprovalSettingConfiguration

	// Approval configuration for enclave maintenance mode.
	EnclaveMaintenanceMode *ApprovalSettingConfiguration
}

// ApprovalSettingsPatchProperties - Granular ApprovalSettings Patch Properties
type ApprovalSettingsPatchProperties struct {
	// Approval configuration for community endpoint updates.
	CommunityEndpointUpdate *ApprovalSettingConfiguration

	// Approval configuration for community maintenance mode.
	CommunityMaintenanceMode *ApprovalSettingConfiguration

	// Approval configuration for connection creation.
	ConnectionCreation *ApprovalSettingConfiguration

	// Approval configuration for connection updates.
	ConnectionUpdate *ApprovalSettingConfiguration

	// Approval configuration for enclave creation.
	EnclaveCreation *ApprovalSettingConfiguration

	// Approval configuration for enclave endpoint updates.
	EnclaveEndpointUpdate *ApprovalSettingConfiguration

	// Approval configuration for enclave maintenance mode.
	EnclaveMaintenanceMode *ApprovalSettingConfiguration
}

// Approver Metadata for approvals request.
type Approver struct {
	// REQUIRED; Entra ObjectID of the approver
	ApproverEntraID *string

	// REQUIRED; approval request last updated at
	LastUpdatedAt *time.Time

	// Action Performed by approver
	ActionPerformed *ActionPerformed

	// READ-ONLY; Indicates if this approver is part of a mandatory approver group with list of Entra IDs
	MandatoryApprovalGroupMembershipIDs []*string
}

// CheckAddressSpaceAvailabilityRequest - Request to the action call to check address space availability.
type CheckAddressSpaceAvailabilityRequest struct {
	// REQUIRED; Resource Id of the Community
	CommunityResourceID *string

	// REQUIRED; Information about the enclave virtual network
	EnclaveVirtualNetwork *VirtualNetworkModel
}

// CheckAddressSpaceAvailabilityResponse - Response of availability of the requested address space.
type CheckAddressSpaceAvailabilityResponse struct {
	// REQUIRED; Boolean representing whether the address space is available.
	Value *bool
}

// CommunityEndpointDestinationRule - Base type for destination rules.
type CommunityEndpointDestinationRule struct {
	// Destination address. Can include multiple CIDR/IP Addresses or fqdn tags or fqdns (for community endpoint) separated by
	// commas.
	Destination *string

	// Destination Type.
	DestinationType *DestinationType

	// Endpoint Rule Name.
	EndpointRuleName *string

	// Port. Can include multiple ports separated by commas or a range indicated by a hyphen.
	Ports *string

	// Protocols. Options specified by Endpoint Protocol Enum.
	Protocols []*CommunityEndpointProtocol

	// Transit Hub Resource Id.
	TransitHubResourceID *string
}

// CommunityEndpointPatchModel - Community Endpoint Patch Resource
type CommunityEndpointPatchModel struct {
	// Community Endpoint Patch properties
	Properties *CommunityEndpointPatchProperties

	// Resource tags.
	Tags map[string]*string
}

// CommunityEndpointPatchProperties - Community Endpoint patchable Properties
type CommunityEndpointPatchProperties struct {
	// REQUIRED; Community Endpoint Rule Collection.
	RuleCollection []*CommunityEndpointDestinationRule

	// Whether update mode is automatic or manual.
	UpdateMode *UpdateMode
}

// CommunityEndpointProperties - Community Endpoint Resource properties
type CommunityEndpointProperties struct {
	// REQUIRED; Community Endpoint Rule Collection.
	RuleCollection []*CommunityEndpointDestinationRule

	// Whether update mode is automatic or manual.
	UpdateMode *UpdateMode

	// READ-ONLY; Provisioning State.
	ProvisioningState *ProvisioningState

	// READ-ONLY; List of resource ids created by community endpoint.
	ResourceCollection []*string
}

// CommunityEndpointResource - CommunityEndpoint Model Resource
type CommunityEndpointResource struct {
	// REQUIRED; The geo-location where the resource lives
	Location *string

	// The resource-specific properties for this resource.
	Properties *CommunityEndpointProperties

	// Resource tags.
	Tags map[string]*string

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

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

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

// CommunityPatchModel - Community Patch Resource
type CommunityPatchModel struct {
	// The managed service identities assigned to this resource.
	Identity *ManagedServiceIdentity

	// Community Patch properties
	Properties *CommunityPatchProperties

	// Resource tags.
	Tags map[string]*string
}

// CommunityPatchProperties - Community Resource Properties without default values
type CommunityPatchProperties struct {
	// Address spaces list
	AddressSpaces []*string

	// Community role assignments
	CommunityRoleAssignments []*RoleAssignmentItem

	// DNS Servers.
	DNSServers []*string

	// SKU of the community's Azure Firewall (Basic, Standard, Premium). Standard is the default
	FirewallSKU *FirewallSKU

	// List of services governed by a community.
	GovernedServiceList []*GovernedServiceItem

	// Granular approval requirements for various actions on the community's resources.
	GranularApprovalSettings *ApprovalSettingsPatchProperties

	// Maintenance Mode configuration.
	MaintenanceModeConfiguration *MaintenanceModeConfigurationPatchModel

	// Community Monitoring Settings for diagnostic and virtual network flow logs
	MonitoringSettings *MonitoringSettingsPatchModel

	// Policy override setting for the community. Specifies whether to apply enclave-specific policies or disable policy enforcement.
	PolicyOverride *CommunityPropertiesPolicyOverride
}

// CommunityProperties - Community Resource Properties
type CommunityProperties struct {
	// Address Space.
	AddressSpace *string

	// Address spaces list
	AddressSpaces []*string

	// Community role assignments
	CommunityRoleAssignments []*RoleAssignmentItem

	// DNS Servers.
	DNSServers []*string

	// SKU of the community's Azure Firewall (Basic, Standard, Premium). Standard is the default
	FirewallSKU *FirewallSKU

	// List of services governed by a community.
	GovernedServiceList []*GovernedServiceItem

	// Granular approval requirements for various actions on the community's resources.
	GranularApprovalSettings *ApprovalSettings

	// Maintenance Mode configuration.
	MaintenanceModeConfiguration *MaintenanceModeConfigurationModel

	// Community Monitoring Settings for diagnostic and virtual network flow logs
	MonitoringSettings *MonitoringSettingsModel

	// Policy override setting for the community. Specifies whether to apply enclave-specific policies or disable policy enforcement.
	PolicyOverride *CommunityPropertiesPolicyOverride

	// READ-ONLY; DedicatedHub List.
	DedicatedHubList []*DedicatedHubResource

	// READ-ONLY; Managed On Behalf Of Configuration.
	ManagedOnBehalfOfConfiguration *ManagedOnBehalfOfConfiguration

	// READ-ONLY; Managed resource group name.
	ManagedResourceGroupName *string

	// READ-ONLY; Provisioning State.
	ProvisioningState *ProvisioningState

	// READ-ONLY; List of resource ids created by communities.
	ResourceCollection []*string
}

// CommunityResource - Community Model Resource
type CommunityResource struct {
	// REQUIRED; The geo-location where the resource lives
	Location *string

	// The managed service identities assigned to this resource.
	Identity *ManagedServiceIdentity

	// The resource-specific properties for this resource.
	Properties *CommunityProperties

	// Resource tags.
	Tags map[string]*string

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

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

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

// ConnectionPatchModel - Enclave Connection Patch Resource
type ConnectionPatchModel struct {
	// Enclave Connection Patch properties
	Properties *ConnectionPatchProperties

	// Resource tags.
	Tags map[string]*string
}

// ConnectionPatchProperties - Enclave Connection patchable Properties
type ConnectionPatchProperties struct {
	// Source CIDR.
	SourceCidr *string
}

// ConnectionProperties - Enclave Connection Resource properties
type ConnectionProperties struct {
	// REQUIRED; Community Resource Id.
	CommunityResourceID *string

	// REQUIRED; Destination Endpoint Resource Id.
	DestinationEndpointID *string

	// REQUIRED; Source Resource Id.
	SourceResourceID *string

	// Source CIDR.
	SourceCidr *string

	// READ-ONLY; Provisioning State.
	ProvisioningState *ProvisioningState

	// READ-ONLY; List of resource ids modified by enclave Connections.
	ResourceCollection []*string

	// READ-ONLY; The state of the enclaveConnection.
	State *ConnectionState

	// READ-ONLY; Destination Endpoint supports automatic or manual updates.
	UpdateMode *UpdateMode
}

// ConnectionResource - EnclaveConnection Model Resource
type ConnectionResource struct {
	// REQUIRED; The geo-location where the resource lives
	Location *string

	// The resource-specific properties for this resource.
	Properties *ConnectionProperties

	// Resource tags.
	Tags map[string]*string

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

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

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

// DedicatedHubPatchModel - Dedicated Hub Patch Resource
type DedicatedHubPatchModel struct {
	// The DedicatedHub resource.
	Properties *DedicatedHubPatchProperties

	// Resource tags.
	Tags map[string]*string
}

// DedicatedHubPatchProperties - Dedicated Hub patchable Properties
type DedicatedHubPatchProperties struct {
	// Designation of hub resource allocation (Pooled or Reserved)
	Designation *Designation
}

// DedicatedHubProperties - Describes the properties of a Dedicated Hub.
type DedicatedHubProperties struct {
	// Designation of hub resource allocation (Pooled or Reserved)
	Designation *Designation

	// READ-ONLY; Firewall Policy Resource ID
	FirewallPolicyResourceID *string

	// READ-ONLY; Firewall Resource ID
	FirewallResourceID *string

	// READ-ONLY; The status of the last operation.
	ProvisioningState *ProvisioningState

	// READ-ONLY; Virtual Hub Resource ID
	VHubResourceID *string
}

// DedicatedHubResource - DedicatedHub Model Resource
type DedicatedHubResource struct {
	// REQUIRED; The geo-location where the resource lives
	Location *string

	// The resource-specific properties for this resource.
	Properties *DedicatedHubProperties

	// Resource tags.
	Tags map[string]*string

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

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

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

// DefaultSettingsModel - Virtual Enclave Default Settings
type DefaultSettingsModel struct {
	// Diagnostic Destination.
	DiagnosticDestination *DiagnosticDestination

	// READ-ONLY; Key Vault Resource Id.
	KeyVaultResourceID *string

	// READ-ONLY; Log Analytics Resource Ids.
	LogAnalyticsResourceIDCollection []*string

	// READ-ONLY; Storage Account Resource Id.
	StorageAccountResourceID *string
}

// DefaultSettingsPatchModel - Virtual Enclave Default Settings
type DefaultSettingsPatchModel struct {
	// Diagnostic Destination.
	DiagnosticDestination *DiagnosticDestination
}

// EndpointDestinationRule - Enclave Endpoint Rule Properties
type EndpointDestinationRule struct {
	// Destination address. Can include multiple CIDR/IP Addresses or fqdn tags or fqdns (for community endpoint) separated by
	// commas.
	Destination *string

	// Endpoint Rule Name.
	EndpointRuleName *string

	// Port. Can include multiple ports separated by commas or a range indicated by a hyphen.
	Ports *string

	// Protocols. Options specified by Endpoint Protocol Enum.
	Protocols []*EndpointProtocol
}

// EndpointPatchModel - Enclave Endpoint Patch Resource
type EndpointPatchModel struct {
	// Enclave Endpoint Patch properties
	Properties *EndpointPatchProperties

	// Resource tags.
	Tags map[string]*string
}

// EndpointPatchProperties - Enclave Endpoint patchable Properties
type EndpointPatchProperties struct {
	// REQUIRED; Enclave Endpoint Rule Collection.
	RuleCollection []*EndpointDestinationRule

	// Whether update mode is automatic or manual.
	UpdateMode *UpdateMode
}

// EndpointProperties - Enclave Endpoint Resource properties
type EndpointProperties struct {
	// REQUIRED; Enclave Endpoint Rule Collection.
	RuleCollection []*EndpointDestinationRule

	// Whether update mode is automatic or manual.
	UpdateMode *UpdateMode

	// READ-ONLY; Provisioning State.
	ProvisioningState *ProvisioningState

	// READ-ONLY; List of resource ids created by community endpoint.
	ResourceCollection []*string
}

// EndpointResource - EnclaveEndpoint Model Resource
type EndpointResource struct {
	// REQUIRED; The geo-location where the resource lives
	Location *string

	// The resource-specific properties for this resource.
	Properties *EndpointProperties

	// Resource tags.
	Tags map[string]*string

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

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

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

// GovernedServiceItem Properties
type GovernedServiceItem struct {
	// REQUIRED; Service ID
	ServiceID *ServiceIdentifier

	// Initiative enforcement (Enabled or Disabled).
	Enforcement *GovernedServiceItemEnforcement

	// Governance option for this service (Allow, Deny, ExceptionOnly, or NotApplicable).
	Option *GovernedServiceItemOption

	// Enforcement mode for policy. AuditOnly, Enforce, or None.
	PolicyAction *GovernedServiceItemPolicyAction

	// READ-ONLY; Initiatives associated with this service.
	Initiatives []*string

	// READ-ONLY; Service name.
	ServiceName *string
}

// MaintenanceModeConfigurationModel - Maintenance Mode
type MaintenanceModeConfigurationModel struct {
	// REQUIRED; Current mode of Maintenance Mode Configuration
	Mode *MaintenanceModeConfigurationModelMode

	// Justification for entering or exiting Maintenance Mode
	Justification *MaintenanceModeConfigurationModelJustification

	// The user, group or service principal object affected by Maintenance Mode
	Principals []*Principal
}

// MaintenanceModeConfigurationPatchModel - Maintenance Mode Patch Model
type MaintenanceModeConfigurationPatchModel struct {
	// REQUIRED; Current mode of Maintenance Mode Configuration
	Mode *MaintenanceModeConfigurationModelMode

	// Justification for entering or exiting Maintenance Mode
	Justification *MaintenanceModeConfigurationModelJustification

	// The user, group or service principal object affected by Maintenance Mode
	Principals []*Principal
}

// ManagedOnBehalfOfConfiguration - Managed-On-Behalf-Of configuration properties. This configuration exists for the resources
// where a resource provider manages those resources on behalf of the resource owner.
type ManagedOnBehalfOfConfiguration struct {
	// READ-ONLY; Managed-On-Behalf-Of broker resources
	MoboBrokerResources []*MoboBrokerResource
}

// ManagedServiceIdentity - Managed service identity (system assigned and/or user assigned identities)
type ManagedServiceIdentity struct {
	// REQUIRED; The type of managed identity assigned to this resource.
	Type *ManagedServiceIdentityType

	// The identities assigned to this resource by the user.
	UserAssignedIdentities map[string]*UserAssignedIdentity

	// READ-ONLY; The service principal ID of the system assigned identity. This property will only be provided for a system assigned
	// identity.
	PrincipalID *string

	// READ-ONLY; The tenant ID of the system assigned identity. This property will only be provided for a system assigned identity.
	TenantID *string
}

// MandatoryApprover - Approver Metadata for approvals request.
type MandatoryApprover struct {
	// REQUIRED; EntraId of the approver
	ApproverEntraID *string
}

// MoboBrokerResource - Managed-On-Behalf-Of broker resource. This resource is created by the Resource Provider to manage
// some resources on behalf of the user.
type MoboBrokerResource struct {
	// Resource identifier of a Managed-On-Behalf-Of broker resource
	ID *string
}

// MonitoringDestination - Monitoring destination configuration with multiple workspaces
type MonitoringDestination struct {
	// REQUIRED; The type of monitoring workspace destination
	DestinationType *MonitoringDestinationType

	// Log analytics workspace resource ID for custom workspace
	CustomWorkspaceResourceID *string

	// Custom name for diagnostic settings
	DiagnosticSettingsName *string
}

// MonitoringDestinationPatchModel - Monitoring Destination Patch Model
type MonitoringDestinationPatchModel struct {
	// REQUIRED; The type of monitoring workspace destination
	DestinationType *MonitoringDestinationType

	// Log analytics workspace resource ID for custom workspace
	CustomWorkspaceResourceID *string

	// Custom name for diagnostic settings
	DiagnosticSettingsName *string
}

// MonitoringSettingsModel - Monitoring Settings
type MonitoringSettingsModel struct {
	// Log Analytics workspace destinations where diagnostic logs will be stored.
	DiagnosticDestinations []*MonitoringDestination

	// Log Analytics workspace destination where virtual network flow logs will be stored.
	FlowLogDestination *MonitoringDestination
}

// MonitoringSettingsPatchModel - Monitoring Settings Patch Model
type MonitoringSettingsPatchModel struct {
	// Log Analytics workspace destinations where diagnostic logs will be stored.
	DiagnosticDestinations []*MonitoringDestinationPatchModel

	// Log Analytics workspace destination where virtual network flow logs will be stored.
	FlowLogDestination *MonitoringDestinationPatchModel
}

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

// Principal for maintenance mode or role assignments
type Principal struct {
	// REQUIRED; The object id associated with the principal
	ID *string

	// REQUIRED; The type of the object id. We currently allow users, groups, and service principals
	Type *PrincipalType
}

// RequestMetadata - Request Metadata for approvals request.
type RequestMetadata struct {
	// REQUIRED; Resource Action of the item being approved or declined.
	ResourceAction *string

	// Payload to be sent upon any action on approval request
	ApprovalCallbackPayload *string

	// Route name for the approval callback
	ApprovalCallbackRoute *string

	// Status of the approval. Uses ApprovalStatus enum.
	ApprovalStatus *ApprovalStatus
}

// RequestMetadataUpdatableProperties - Request Metadata patch properties.
type RequestMetadataUpdatableProperties struct {
	// REQUIRED; Resource Action of the item being approved or declined.
	ResourceAction *string

	// Payload to be sent upon any action on approval request
	ApprovalCallbackPayload *string

	// Route name for the approval callback
	ApprovalCallbackRoute *string

	// Status of the approval. Uses ApprovalStatus enum.
	ApprovalStatus *ApprovalStatus
}

// Resource - Virtual Enclave Model Resource
type Resource struct {
	// REQUIRED; The geo-location where the resource lives
	Location *string

	// The managed service identities assigned to this resource.
	Identity *ManagedServiceIdentity

	// The resource-specific properties for this resource.
	Properties *VirtualEnclaveProperties

	// Resource tags.
	Tags map[string]*string

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

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

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

// RoleAssignmentItem - Role assignment item that indicates which principals should be assigned this role definition
type RoleAssignmentItem struct {
	// REQUIRED; Role definition identifier
	RoleDefinitionID *string

	// Condition under which the principal can be granted permission
	Condition *string

	// List of principal IDs to which to assign this role definition
	Principals []*Principal
}

// SubnetConfiguration - Subnet Configuration
type SubnetConfiguration struct {
	// REQUIRED; Network prefix size.
	NetworkPrefixSize *int32

	// REQUIRED; Subnet name.
	SubnetName *string

	// Subnet delegation.
	SubnetDelegation *string

	// READ-ONLY; Address prefix.
	AddressPrefix *string

	// READ-ONLY; Network security group ID.
	NetworkSecurityGroupResourceID *string

	// READ-ONLY; Subnet Resource ID.
	SubnetResourceID *string
}

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

// TransitHubPatchModel - TH Patch Resource
type TransitHubPatchModel struct {
	// The TransitHub resource.
	Properties *TransitHubPatchProperties

	// Resource tags.
	Tags map[string]*string
}

// TransitHubPatchProperties - Transit Hub patchable Properties
type TransitHubPatchProperties struct {
	// Specifies the security provider for the transit hub.
	SecurityProvider *SecurityProvider

	// The state of the transitHub.
	State *TransitHubState

	// The TransitOption of the transitHub.
	TransitOption *TransitOption
}

// TransitHubProperties - Describes the properties of an Transit Hub.
type TransitHubProperties struct {
	// Specifies the security provider for the transit hub.
	SecurityProvider *SecurityProvider

	// The state of the transitHub.
	State *TransitHubState

	// The TransitOption of the transitHub.
	TransitOption *TransitOption

	// READ-ONLY; The status of the last operation.
	ProvisioningState *ProvisioningState

	// READ-ONLY; List of resource ids modified by transitHubs.
	ResourceCollection []*string
}

// TransitHubResource - TransitHub Model Resource
type TransitHubResource struct {
	// REQUIRED; The geo-location where the resource lives
	Location *string

	// The resource-specific properties for this resource.
	Properties *TransitHubProperties

	// Resource tags.
	Tags map[string]*string

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

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

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

// TransitOption Properties
type TransitOption struct {
	// Transit Option Params
	Params *TransitOptionParams

	// Transit Option Type.
	Type *TransitOptionType
}

// TransitOptionParams Properties
type TransitOptionParams struct {
	// Transit Option Params remoteVirtualNetworkId.
	RemoteVirtualNetworkID *string

	// Transit Option Params scaleUnits.
	ScaleUnits *int64
}

// UserAssignedIdentity - User assigned identity properties
type UserAssignedIdentity struct {
	// READ-ONLY; The client ID of the assigned identity.
	ClientID *string

	// READ-ONLY; The principal ID of the assigned identity.
	PrincipalID *string
}

// VirtualEnclaveApprovalSettings - Virtual Enclave ApprovalSettings Properties for 2025-11-01-preview and later versions
type VirtualEnclaveApprovalSettings struct {
	// Approval configuration for connection creation.
	ConnectionCreation *ApprovalSettingConfiguration

	// Approval configuration for connection updates.
	ConnectionUpdate *ApprovalSettingConfiguration

	// Approval configuration for enclave endpoint updates.
	EnclaveEndpointUpdate *ApprovalSettingConfiguration

	// Approval configuration for enclave maintenance mode.
	EnclaveMaintenanceMode *ApprovalSettingConfiguration
}

// VirtualEnclaveApprovalSettingsPatchProperties - Virtual Enclave ApprovalSettings Patch Properties
type VirtualEnclaveApprovalSettingsPatchProperties struct {
	// Approval configuration for connection creation.
	ConnectionCreation *ApprovalSettingConfiguration

	// Approval configuration for connection updates.
	ConnectionUpdate *ApprovalSettingConfiguration

	// Approval configuration for enclave endpoint updates.
	EnclaveEndpointUpdate *ApprovalSettingConfiguration

	// Approval configuration for enclave maintenance mode.
	EnclaveMaintenanceMode *ApprovalSettingConfiguration
}

// VirtualEnclavePatchModel - Virtual Enclave Patch Model
type VirtualEnclavePatchModel struct {
	// The managed service identities assigned to this resource.
	Identity *ManagedServiceIdentity

	// Virtual Enclave Patch properties
	Properties *VirtualEnclavePatchProperties

	// Resource tags.
	Tags map[string]*string
}

// VirtualEnclavePatchProperties - Virtual Enclave Patchable Properties
type VirtualEnclavePatchProperties struct {
	// REQUIRED; Virtual Network.
	EnclaveVirtualNetwork *VirtualNetworkModel

	// Approval requirements for various actions on the enclave's resources.
	ApprovalSettings *VirtualEnclaveApprovalSettingsPatchProperties

	// Deploy Bastion service (True or False).
	BastionEnabled *bool

	// DedicatedHub Resource ID.
	DedicatedHubResourceID *string

	// Enclave default settings.
	EnclaveDefaultSettings *DefaultSettingsPatchModel

	// Enclave role assignments
	EnclaveRoleAssignments []*RoleAssignmentItem

	// Enclave specific policies
	GovernedServiceList []*GovernedServiceItem

	// Maintenance Mode configuration.
	MaintenanceModeConfiguration *MaintenanceModeConfigurationPatchModel

	// Virtual Enclave Monitoring Settings for diagnostic and virtual network flow logs
	MonitoringSettings *MonitoringSettingsPatchModel

	// Controls whether standard Azure RBAC role inheritance applies to the workload resource group(s)
	RbacInheritance *RbacInheritanceMode

	// Specifies whether resources in the workload resource group(s) are visible through standard RBAC
	WorkloadResourceVisibility *ResourceVisibilityMode

	// Workload role assignments
	WorkloadRoleAssignments []*RoleAssignmentItem
}

// VirtualEnclaveProperties - Virtual Enclave Resource properties
type VirtualEnclaveProperties struct {
	// REQUIRED; Community Resource Id.
	CommunityResourceID *string

	// REQUIRED; Virtual Network.
	EnclaveVirtualNetwork *VirtualNetworkModel

	// Approval requirements for various actions on the enclave's resources.
	ApprovalSettings *VirtualEnclaveApprovalSettings

	// Deploy Bastion service (True or False).
	BastionEnabled *bool

	// DedicatedHub Resource ID.
	DedicatedHubResourceID *string

	// Enclave default settings.
	EnclaveDefaultSettings *DefaultSettingsModel

	// Enclave role assignments
	EnclaveRoleAssignments []*RoleAssignmentItem

	// Enclave specific policies
	GovernedServiceList []*GovernedServiceItem

	// Maintenance Mode configuration.
	MaintenanceModeConfiguration *MaintenanceModeConfigurationModel

	// Virtual Enclave Monitoring Settings for diagnostic and virtual network flow logs
	MonitoringSettings *MonitoringSettingsModel

	// Controls whether standard Azure RBAC role inheritance applies to the workload resource group(s)
	RbacInheritance *RbacInheritanceMode

	// Specifies whether resources in the workload resource group(s) are visible through standard RBAC
	WorkloadResourceVisibility *ResourceVisibilityMode

	// Workload role assignments
	WorkloadRoleAssignments []*RoleAssignmentItem

	// READ-ONLY; Enclave Address Spaces
	EnclaveAddressSpaces *AddressSpacesModel

	// READ-ONLY; Managed On Behalf Of Configuration.
	ManagedOnBehalfOfConfiguration *ManagedOnBehalfOfConfiguration

	// READ-ONLY; Managed resource group name.
	ManagedResourceGroupName *string

	// READ-ONLY; Provisioning State.
	ProvisioningState *ProvisioningState

	// READ-ONLY; List of resource ids created by Virtual Enclave.
	ResourceCollection []*string
}

// VirtualNetworkModel - Enclave Virtual Network Properties
type VirtualNetworkModel struct {
	// Allow Subnet Communication.
	AllowSubnetCommunication *bool

	// Custom CIDR Range.
	CustomCidrRange *string

	// Network Name.
	NetworkName *string

	// Network Size.
	NetworkSize *string

	// Subnet Configurations.
	SubnetConfigurations []*SubnetConfiguration
}

// WorkloadPatchModel - Workload Patch Resource
type WorkloadPatchModel struct {
	// Workload Patch properties
	Properties *WorkloadPatchProperties

	// Resource tags.
	Tags map[string]*string
}

// WorkloadPatchProperties - Workload patchable Properties
type WorkloadPatchProperties struct {
	// List of resource group ids.
	ResourceGroupCollection []*string
}

// WorkloadProperties - Workload Resource properties
type WorkloadProperties struct {
	// List of resource group ids.
	ResourceGroupCollection []*string

	// READ-ONLY; Managed On Behalf Of Configuration.
	ManagedOnBehalfOfConfiguration *ManagedOnBehalfOfConfiguration

	// READ-ONLY; Provisioning State.
	ProvisioningState *ProvisioningState
}

// WorkloadResource - Workload Model Resource
type WorkloadResource struct {
	// REQUIRED; The geo-location where the resource lives
	Location *string

	// The resource-specific properties for this resource.
	Properties *WorkloadProperties

	// Resource tags.
	Tags map[string]*string

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

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

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