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

import "time"

// AgriServiceConfig - Config of the AgriService resource instance.
type AgriServiceConfig struct {
	// READ-ONLY; App service resource Id.
	AppServiceResourceID *string

	// READ-ONLY; Cosmos Db resource Id.
	CosmosDbResourceID *string

	// READ-ONLY; Instance URI of the AgriService instance.
	InstanceURI *string

	// READ-ONLY; Key vault resource Id.
	KeyVaultResourceID *string

	// READ-ONLY; Redis cache resource Id.
	RedisCacheResourceID *string

	// READ-ONLY; Storage account resource Id.
	StorageAccountResourceID *string

	// READ-ONLY; Version of AgriService instance.
	Version *string
}

// AgriServiceResource - Schema of the AgriService resource from Microsoft.AgriculturePlatform resource provider.
type AgriServiceResource 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 *AgriServiceResourceProperties

	// The SKU (Stock Keeping Unit) assigned to this resource.
	SKU *SKU

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

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

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

// AgriServiceResourceProperties - Details of the Agriculture AgriDataManager.
type AgriServiceResourceProperties struct {
	// Config of the AgriService instance.
	Config *AgriServiceConfig

	// Data connector credentials of AgriService instance.
	DataConnectorCredentials []*DataConnectorCredentialMap

	// AgriService installed solutions.
	InstalledSolutions []*InstalledSolutionMap

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

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

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

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

	// The SKU (Stock Keeping Unit) assigned to this resource.
	SKU *SKU

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

// AgriServiceResourceUpdateProperties - The updatable properties of the AgriServiceResource.
type AgriServiceResourceUpdateProperties struct {
	// Config of the AgriService instance.
	Config *AgriServiceConfig

	// Data connector credentials of AgriService instance.
	DataConnectorCredentials []*DataConnectorCredentialMap

	// AgriService installed solutions.
	InstalledSolutions []*InstalledSolutionMap
}

// AvailableAgriSolutionListResult - The list of available agri solutions.
type AvailableAgriSolutionListResult struct {
	// REQUIRED; Agri solutions list.
	Solutions []*DataManagerForAgricultureSolution
}

// DataConnectorCredentialMap - Mapping of data connector credentials.
type DataConnectorCredentialMap struct {
	// REQUIRED; The key representing the credential.
	Key *string

	// REQUIRED; The data connector credential value.
	Value *DataConnectorCredentials
}

// DataConnectorCredentials - The properties related to an AgriService data connector.
type DataConnectorCredentials struct {
	// Client Id associated with the provider, if type of credentials is OAuthClientCredentials.
	ClientID *string

	// Name of the key vault key.
	KeyName *string

	// Uri of the key vault
	KeyVaultURI *string

	// Version of the key vault key.
	KeyVersion *string

	// Type of credential.
	Kind *AuthCredentialsKind
}

// DataManagerForAgricultureSolution - Data Manager for Agriculture solution.
type DataManagerForAgricultureSolution struct {
	// REQUIRED; Entra application Id used to access azure data manager for agriculture instance.
	AccessAzureDataManagerForAgricultureApplicationID *string

	// REQUIRED; Entra application name used to access azure data manager for agriculture instance.
	AccessAzureDataManagerForAgricultureApplicationName *string

	// REQUIRED; Data access scopes.
	DataAccessScopes []*string

	// REQUIRED; Whether solution inference will validate input.
	IsValidateInput *bool

	// REQUIRED; Marketplace offer details.
	MarketPlaceOfferDetails *MarketPlaceOfferDetails

	// REQUIRED; Partner Id.
	PartnerID *string

	// REQUIRED; Partner tenant Id.
	PartnerTenantID *string

	// REQUIRED; Saas application Id.
	SaasApplicationID *string

	// REQUIRED; Solution Id.
	SolutionID *string
}

// InstalledSolutionMap - Mapping of installed solutions.
type InstalledSolutionMap struct {
	// REQUIRED; The key representing the installed solution.
	Key *string

	// REQUIRED; The installed solution value.
	Value *Solution
}

// ManagedOnBehalfOfConfiguration - Configuration of the managed on behalf of resource.
type ManagedOnBehalfOfConfiguration struct {
	// READ-ONLY; Associated MoboBrokerResources.
	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
}

// MarketPlaceOfferDetails - Marketplace offer details of Agri solution.
type MarketPlaceOfferDetails struct {
	// REQUIRED; Publisher Id.
	PublisherID *string

	// REQUIRED; Saas offer Id.
	SaasOfferID *string
}

// MoboBrokerResource - MoboBroker resource.
type MoboBrokerResource struct {
	// READ-ONLY; The fully qualified resource ID of the MoboBroker resource.
	// Example: `/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}`
	ID *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
}

// SKU - The resource model definition representing SKU
type SKU struct {
	// REQUIRED; The name of the SKU. Ex - P3. It is typically a letter+number code
	Name *string

	// If the SKU supports scale out/in then the capacity integer should be included. If scale out/in is not possible for the
	// resource this may be omitted.
	Capacity *int32

	// If the service has different generations of hardware, for the same SKU, then that can be captured here.
	Family *string

	// The SKU size. When the name field is the combination of tier and some other value, this would be the standalone code.
	Size *string

	// This field is required to be implemented by the Resource Provider if the service has more than one tier, but is not required
	// on a PUT.
	Tier *SKUTier
}

// Solution - Installed data manager for Agriculture solution detail.
type Solution struct {
	// Application name of the solution.
	ApplicationName *string

	// Marketplace publisher Id.
	MarketPlacePublisherID *string

	// Partner Id.
	PartnerID *string

	// Plan Id.
	PlanID *string

	// Saas subscription Id.
	SaasSubscriptionID *string

	// Saas subscription name.
	SaasSubscriptionName *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
}
