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

import "time"

// ActivateSaaSParameterRequest - SaaS guid for Activate and Validate SaaS Resource
type ActivateSaaSParameterRequest struct {
	// REQUIRED; SaaS guid for Activate and Validate SaaS Resource
	SaaSGUID *string
}

// BackupOptions - The backup options for the VM backup
type BackupOptions struct {
	// REQUIRED; Indicates whether to run backup immediately or not for the VM
	BackupCopyImmediately *bool

	// REQUIRED; The name of the backup job to be shown in Commvault
	JobDescription *string

	// REQUIRED; Indicates whether to notify the user on job completion
	NotifyUserOnJobCompletion *bool

	// REQUIRED; Indicates whether to run snapshot backup or not for the VM, if false, it will run regular backup
	RunSnapShotBackup *bool

	// Indicates whether to stop backup or not for the VM
	BackupLevel *BackupLevel
}

// BackupProtectionGroupRequest - The properties of BackupProtectionGroupRequest
type BackupProtectionGroupRequest struct {
	// REQUIRED; The backup options for the VM backup
	BackupOptions *BackupOptions

	// REQUIRED; The vm list details.
	VMList []*VMListItem
}

// BackupProtectionGroupResponse - Backup job response for a Protection Group
type BackupProtectionGroupResponse struct {
	// READ-ONLY; The jobIds returned from Commvault.
	JobIDs []*string

	// READ-ONLY; The Commvault response for taskId
	TaskID *int32
}

// CloudAccount - A Commvault Cloud Account Resource
type CloudAccount 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 *CloudAccountProperties

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

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

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

// CloudAccountProperties - Properties specific to Commvault Cloud Account resource
type CloudAccountProperties struct {
	// REQUIRED; Marketplace details of the resource.
	Marketplace *MarketplaceDetails

	// REQUIRED; Details of the user.
	User *UserDetails

	// The backup administrator principal provided during CCA create. Required on create (enforced by backend), ignored on update.
	BackupAdminOnCcaCreate *EntityInfo

	// The multi-person authorization (MPA) administrator principal provided during CCA create. Required on create (enforced by
	// backend), ignored on update.
	MultiPersonAuthorizationOnCcaCreate *EntityInfo

	// READ-ONLY; Provisioning state of the resource.
	ProvisioningState *ResourceProvisioningState

	// READ-ONLY; SSO URL for the Commvault Cloud Account
	SsoURL *string
}

// CloudAccountUpdate - The type used for update operations of the CloudAccount.
type CloudAccountUpdate struct {
	// The managed service identities assigned to this resource.
	Identity *ManagedServiceIdentity

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

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

// CloudAccountUpdateProperties - The updatable properties of the CloudAccount.
type CloudAccountUpdateProperties struct {
	// Marketplace details of the resource.
	Marketplace *MarketplaceDetails

	// Details of the user.
	User *UserDetails
}

// CommvaultPlan - A Commvault Plan Resource
type CommvaultPlan struct {
	// The resource-specific properties for this resource.
	Properties *PlanProperties

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

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

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

// CountProtectedItemsRequest - Request to count protected items for the provided CCA resource IDs across subscriptions.
type CountProtectedItemsRequest struct {
	// REQUIRED; The list of CCA resource IDs.
	ResourceIDs []*string
}

// CountProtectedItemsResponse - Response for count protected items operation.
type CountProtectedItemsResponse struct {
	// REQUIRED; The count of protected items.
	Count *string
}

// EntityInfo - Information about an Entra entity (user or group) assigned to a role
type EntityInfo struct {
	// The display name of the Entra entity
	DisplayName *string

	// The type of entity - user or group
	EntityType *EntityType

	// The unique identifier (UUID) of the Entra entity
	ID *string
}

// ExtendedRetentionTime - Extended Retention Time
type ExtendedRetentionTime struct {
	// Backup Rule Type for Extended Retention
	BackupRuleType *BackupRuleType

	// Retention period for Extended Retention
	RetentionPeriod *int32

	// Retention time for Extended Retention
	RetentionTime *RetentionTime
}

// LatestLinkedSaaSResponse - Response of get latest linked SaaS resource operation
type LatestLinkedSaaSResponse struct {
	// Flag indicating if the SaaS resource is hidden
	IsHiddenSaaS *bool

	// SaaS resource id
	SaaSResourceID *string
}

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

// MarketplaceDetails - Marketplace details for an organization
type MarketplaceDetails struct {
	// REQUIRED; Offer details for the marketplace that is selected by the user
	OfferDetails *OfferDetails

	// Marketplace SaaS Resource Id
	SaasResourceID *string

	// Azure subscription id for the the marketplace offer is purchased from
	SubscriptionID *string

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

// OfferDetails - Offer details for the marketplace that is selected by the user
type OfferDetails struct {
	// REQUIRED; Offer Id for the marketplace offer
	OfferID *string

	// REQUIRED; Publisher Id for the marketplace offer
	PublisherID *string

	// Plan Id for the marketplace offer
	PlanID *string

	// Plan Name for the marketplace offer
	PlanName *string

	// Plan Display Name for the marketplace offer
	TermID *string

	// Plan Display Name for the marketplace offer
	TermUnit *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
}

// PlanProperties - The properties of Commvault Plan
type PlanProperties struct {
	// REQUIRED; Location of the Commvault Plan
	Location *string

	// REQUIRED; The storage plans associated with the Commvault Plan
	StoragePlans []*StoragePlan

	// The Commvault Plan Retention
	Retention *Retention

	// The Commvault Plan Schedule
	Schedules []*Schedule

	// READ-ONLY; Provisioning state of the resource.
	ProvisioningState *ResourceProvisioningState
}

// ProtectedItem - Concrete proxy resource types can be created by aliasing this type using a specific property type.
type ProtectedItem struct {
	// The resource-specific properties for this resource.
	Properties *ProtectedItemProperties

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

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

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

// ProtectedItemProperties - The properties of Commvault Protected Item
type ProtectedItemProperties struct {
	// READ-ONLY; The Commvault Protected Item backup time
	LastBackUpTime *int64

	// READ-ONLY; The location of the protected item
	Location *string

	// READ-ONLY; The resource group of the protected item
	ResourceGroup *string

	// READ-ONLY; The Name of the commvault protected item
	ResourceName *string

	// READ-ONLY; The GUID of VM
	VMGUID *string
}

// ProtectionGroup - A Commvault Plan Resource
type ProtectionGroup struct {
	// The resource-specific properties for this resource.
	Properties *ProtectionGroupProperties

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

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

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

// ProtectionGroupProperties - The properties of Commvault Protection Group
type ProtectionGroupProperties struct {
	// CONSTANT; The datasource type of Commvault Protection Group
	// Field has constant value "AzureVM", any specified value is ignored.
	DataSourceType *string

	// REQUIRED; The Commvault Plan to be associated with the Protection Group
	Plan *string

	// REQUIRED; The resources to be protected under Protection Group
	Resources *ProtectionGroupResources

	// READ-ONLY; The backup activity status indicating if backup is enabled or not on the protection group
	BackupActivityStatus *string

	// READ-ONLY; The Commvault Protection Group backup time
	LastBackUpTime *int64

	// READ-ONLY; The number of ProtectedItems under the Protection Group
	NumberOfProtectedItems *int32

	// READ-ONLY; The protection group schedule
	ProtectionStatus *ProtectionStatus

	// READ-ONLY; Provisioning state of the resource.
	ProvisioningState *ResourceProvisioningState
}

// ProtectionGroupResources - The resources to be protected under Protection Group
type ProtectionGroupResources struct {
	// The items to be protected under Protection Group
	Manual []*string

	// Rules to match resources
	MatchRules *ProtectionGroupResourcesMatchRules
}

type ProtectionGroupResourcesMatchRules struct {
	// REQUIRED; match Type all or any
	MatchType *MatchType

	// REQUIRED; rules to match
	Rules []*Rule
}

// RestorePoints - Restore points of a Protected Item
type RestorePoints struct {
	// READ-ONLY; The Commvault Protected Item Restore points
	RestoreTimes []*int64
}

// RestoreProtectionItemRequest - The properties of RestoreProtectionItemRequest
type RestoreProtectionItemRequest struct {
	// REQUIRED; Check whether inplace or out of place restore.
	InPlaceRestore *bool

	// REQUIRED; The vm destination details of the VM.
	VMDestinationInfo *VMDestinationInfo

	// Type of Restore
	RestoreType *RestoreType

	// Time to restore
	ToTime *string
}

// RestoreProtectionItemResponse - Restore resource response for a Protected Item
type RestoreProtectionItemResponse struct {
	// READ-ONLY; The jobIds returned from Commvault.
	JobIDs []*string

	// READ-ONLY; The Commvault response for taskId
	TaskID *int32
}

// Retention - A Commvault Plan Retention Model
type Retention struct {
	// Number of Snapshots
	NumberOfSnapshots *int32
}

// RoleAssignment - A role assignment mapping a Commvault role to one or more Entra entities (users or groups)
type RoleAssignment struct {
	// The Entra entities (users or groups) assigned to this role
	Entities []*EntityInfo

	// The name of the Commvault role
	RoleName *RoleName
}

// RoleMapping - A Commvault Role Mapping Resource. Singleton per Cloud Account - maps Entra security groups to Commvault
// roles for RBAC enforcement.
type RoleMapping struct {
	// The resource-specific properties for this resource.
	Properties *RoleMappingProperties

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

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

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

// RoleMappingProperties - The properties of Commvault Role Mapping
type RoleMappingProperties struct {
	// The list of role assignments mapping roles to Entra entities (users and groups)
	Roles []*RoleAssignment

	// READ-ONLY; Provisioning state of the resource.
	ProvisioningState *ResourceProvisioningState
}

// Rule - The rules to match resources
type Rule struct {
	// REQUIRED; property of the rule
	Operator *Operator

	// REQUIRED; property of the rule
	Property *RuleProperty

	// REQUIRED; property of the rule
	Value *string
}

// SaaSData - SaaS-related data properties
type SaaSData struct {
	// SaaS resource id
	SaaSResourceID *string
}

// SaaSResourceDetailsResponse - Marketplace SaaS resource details.
type SaaSResourceDetailsResponse struct {
	// Id of the Marketplace SaaS Resource
	SaaSResourceID *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
}

// Schedule - A Commvault Plan Schedule Model
type Schedule struct {
	// REQUIRED; Type of Backup
	BackupType *BackUpType

	// Day of the month
	DayOfMonth *int32

	// Day of the week
	DayOfWeek *DayOfWeek

	// Frequency of Retention
	Frequency *Frequency

	// Month of the year
	MonthOfYear *MonthOfYear

	// Interval of Retention
	RunsEvery *int32

	// Time of Retention
	Time *string

	// Time Zone
	TimeZone *string

	// Week of the month
	WeekOfMonth *WeekOfMonth

	// Weekly Days List
	WeeklyDays []*WeeklyDays
}

// StopBackupProtectionGroupRequest - The properties of StopBackupProtectionGroupRequest
type StopBackupProtectionGroupRequest struct {
	// REQUIRED; The reason for stopping the backup
	Reason *string

	// Any further comments
	Comment *string
}

// Storage - A Commvault Storage Resource
type Storage struct {
	// The resource-specific properties for this resource.
	Properties *StorageProperties

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

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

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

// StoragePlan - The properties of Commvault Storage Plan
type StoragePlan struct {
	// REQUIRED; The name of the Storage resource
	Name *string

	// Backup Rule Type
	BackupRuleType *BackupRuleType

	// Copy Name from Commvault
	CopyName *string

	// Precedence of the Storage Plan, 1 is the highest precedence, 2 is the next highest, and so on
	CopyPrecedence *int32

	// Extended Retention Policy
	ExtendedRetention []*ExtendedRetentionTime

	// Indicates the retention period valid only if the type of retention chosen in CUSTOM
	RetentionPeriod *int32

	// Indicates the retention timeframe valid only if the type of retention chosen in CUSTOM
	RetentionTime *RetentionTime

	// Id of the Storage Pool
	StoragePoolID *string
}

// StorageProperties - The properties of Commvault Storage
type StorageProperties struct {
	// REQUIRED; The class of Commvault Storage
	Class *StorageClassType

	// REQUIRED; Location of the Commvault Storage
	Location *string

	// REQUIRED; The type of Commvault Storage
	StorageType *StorageType

	// REQUIRED; The vendor of Commvault Storage
	Vendor *Vendor

	// READ-ONLY; Provisioning state of the resource.
	ProvisioningState *ResourceProvisioningState
}

// 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 for an organization
type UserDetails struct {
	// Email address of the user
	EmailAddress *string

	// First name of the user
	FirstName *string

	// Last name of the user
	LastName *string

	// User's phone number
	PhoneNumber *string

	// User's principal name
	Upn *string
}

// VMDestinationInfo - The properties of VmDestinationInfo
type VMDestinationInfo struct {
	// REQUIRED; List of information on VMs
	VMInfoList []*VMInfo
}

// VMInfo - The properties of information of a VM
type VMInfo struct {
	// REQUIRED; The GUID of VM to be restored.
	SourceVMGUID *string

	// REQUIRED; The storage account to be used for restore.
	StorageAccountID *string

	// The identifier to check if to attach and swap disk of the VM.
	AttachAndSwapOsDisk *bool

	// The name of the VM.
	Name *string

	// The network Id of the VM.
	NetworkID *string

	// The identifier to check if VM needs to be powered on.
	PowerOnVMAfterRestore *bool

	// The region of the VM.
	Region *string

	// The resource group of the VM.
	ResourceGroup *string

	// The subnet Id of the VM.
	SubnetID *string

	// The GUID of target VM used in DISK ATTACH.
	TargetVMGUID *string

	// The vmTag of the VM.
	Vmtags []*VMTag
}

// VMListItem - The VM list item for backup
type VMListItem struct {
	// REQUIRED; The GUID of the VM to backup
	VMGUID *string
}

// VMTag - The properties of VMTag for Restore Request
type VMTag struct {
	// REQUIRED; The name of VM tag.
	Name *string

	// REQUIRED; The value of VM tag.
	Value *string
}
