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

import "time"

// Capacity for a Resource
type Capacity struct {
	// Current Capacity of the resource
	Current *string

	// Units to be increased
	Incremental *string

	// Maximum Capacity
	Max *string

	// Minimum Capacity
	Min *string
}

// EncryptionIdentityProperties of Dell FileSystem resource
type EncryptionIdentityProperties struct {
	// User-assigned identity resource id - Only when user opts for UserAssigned identity and hence optional
	IdentityResourceID *string

	// Identity type - SystemAssigned/UserAssigned - Only UserAssigned is supported now
	IdentityType *EncryptionIdentityType
}

// EncryptionIdentityUpdateProperties of Dell FileSystem resource
type EncryptionIdentityUpdateProperties struct {
	// User-assigned identity resource id - Only when user opts for UserAssigned identity and hence optional
	IdentityResourceID *string

	// Identity type - SystemAssigned/UserAssigned - Only UserAssigned is supported now
	IdentityType *EncryptionIdentityType
}

// EncryptionProperties of Dell FileSystem resource
type EncryptionProperties struct {
	// REQUIRED; Encryption Type - MMK/CMK
	EncryptionType *ResourceEncryptionType

	// Identity configuration for Customer-managed key settings defining which identity should be used to auth to Key Vault -
	// Only when user opts for CMK and hence optional
	EncryptionIdentityProperties *EncryptionIdentityProperties

	// Versioned Encryption Key Url - Only when user opts for CMK and hence optional
	KeyURL *string
}

// EncryptionUpdateProperties of Dell FileSystem resource
type EncryptionUpdateProperties struct {
	// Identity configuration for Customer-managed key settings defining which identity should be used to auth to Key Vault -
	// Only when user opts for CMK and hence optional
	EncryptionIdentityProperties *EncryptionIdentityUpdateProperties

	// Encryption Type - MMK/CMK
	EncryptionType *ResourceEncryptionType

	// Versioned Encryption Key Url - Only when user opts for CMK and hence optional
	KeyURL *string
}

// FileSystemResource - Concrete tracked resource types can be created by aliasing this type using a specific property type.
type FileSystemResource 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 *FileSystemResourceProperties

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

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

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

// FileSystemResourceProperties - Properties specific to the Dell File System resource
type FileSystemResourceProperties struct {
	// REQUIRED; Domain range for the delegated subnet
	DelegatedSubnetCidr *string

	// REQUIRED; Delegated subnet id for Vnet injection
	DelegatedSubnetID *string

	// REQUIRED; DellReferenceNumber of the resource
	DellReferenceNumber *string

	// REQUIRED; EncryptionProperties of the resource
	Encryption *EncryptionProperties

	// REQUIRED; Marketplace details
	Marketplace *MarketplaceDetails

	// REQUIRED; User Details
	User *UserDetails

	// Capacity for Dell Filesystem, Will be received as part of Job Status
	Capacity *Capacity

	// File system Id of the resource
	FileSystemID *string

	// OneFS url
	OneFsURL *string

	// Smart Connect FQDN of the resource
	SmartConnectFqdn *string

	// READ-ONLY; Provisioning State of the resource
	ProvisioningState *ProvisioningState
}

// FileSystemResourceUpdate - The type used for update operations of the FileSystemResource.
type FileSystemResourceUpdate struct {
	// The managed service identities assigned to this resource.
	Identity *ManagedServiceIdentityUpdate

	// The updatable properties of the FileSystemResource.
	Properties *FileSystemResourceUpdateProperties

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

// FileSystemResourceUpdateProperties - The updatable properties of the FileSystemResource.
type FileSystemResourceUpdateProperties struct {
	// Capacity for Dell Filesystem
	Capacity *Capacity

	// Delegated subnet id for Vnet injection
	DelegatedSubnetID *string

	// Encryption Details of the resource
	Encryption *EncryptionUpdateProperties
}

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

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

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

// MarketplaceDetails of Dell FileSystem resource
type MarketplaceDetails struct {
	// REQUIRED; Offer Id
	OfferID *string

	// REQUIRED; Plan Id
	PlanID *string

	// REQUIRED; Plan Name
	PlanName *string

	// End Date of the subscription
	EndDate *string

	// Marketplace Subscription Id
	MarketplaceSubscriptionID *string

	// Private Offer Id
	PrivateOfferID *string

	// Publisher Id
	PublisherID *string

	// Term Unit
	TermUnit *string

	// READ-ONLY; Marketplace subscription status
	MarketplaceSubscriptionStatus *MarketplaceSubscriptionStatus
}

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

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

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

// UserDetails - User Details of Dell FileSystem resource
type UserDetails struct {
	// REQUIRED; User Email
	Email *string
}
