// Code generated by azure-service-operator-codegen. DO NOT EDIT.
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT license.
package arm

type Product_STATUS struct {
	// Id: Fully qualified resource ID for the resource. Ex -
	// /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}
	Id *string `json:"id,omitempty"`

	// Name: The name of the resource
	Name *string `json:"name,omitempty"`

	// Properties: Product entity contract properties.
	Properties *ProductContractProperties_STATUS `json:"properties,omitempty"`

	// Type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or "Microsoft.Storage/storageAccounts"
	Type *string `json:"type,omitempty"`
}

// Product profile.
type ProductContractProperties_STATUS struct {
	// ApprovalRequired: whether subscription approval is required. If false, new subscriptions will be approved automatically
	// enabling developers to call the product’s APIs immediately after subscribing. If true, administrators must manually
	// approve the subscription before the developer can any of the product’s APIs. Can be present only if
	// subscriptionRequired property is present and has a value of false.
	ApprovalRequired *bool `json:"approvalRequired,omitempty"`

	// Description: Product description. May include HTML formatting tags.
	Description *string `json:"description,omitempty"`

	// DisplayName: Product name.
	DisplayName *string `json:"displayName,omitempty"`

	// State: whether product is published or not. Published products are discoverable by users of developer portal. Non
	// published products are visible only to administrators. Default state of Product is notPublished.
	State *ProductContractProperties_State_STATUS `json:"state,omitempty"`

	// SubscriptionRequired: Whether a product subscription is required for accessing APIs included in this product. If true,
	// the product is referred to as "protected" and a valid subscription key is required for a request to an API included in
	// the product to succeed. If false, the product is referred to as "open" and requests to an API included in the product
	// can be made without a subscription key. If property is omitted when creating a new product it's value is assumed to be
	// true.
	SubscriptionRequired *bool `json:"subscriptionRequired,omitempty"`

	// SubscriptionsLimit: Whether the number of subscriptions a user can have to this product at the same time. Set to null or
	// omit to allow unlimited per user subscriptions. Can be present only if subscriptionRequired property is present and has
	// a value of false.
	SubscriptionsLimit *int `json:"subscriptionsLimit,omitempty"`

	// Terms: Product terms of use. Developers trying to subscribe to the product will be presented and required to accept
	// these terms before they can complete the subscription process.
	Terms *string `json:"terms,omitempty"`
}

type ProductContractProperties_State_STATUS string

const (
	ProductContractProperties_State_STATUS_NotPublished = ProductContractProperties_State_STATUS("notPublished")
	ProductContractProperties_State_STATUS_Published    = ProductContractProperties_State_STATUS("published")
)

// Mapping from string to ProductContractProperties_State_STATUS
var productContractProperties_State_STATUS_Values = map[string]ProductContractProperties_State_STATUS{
	"notpublished": ProductContractProperties_State_STATUS_NotPublished,
	"published":    ProductContractProperties_State_STATUS_Published,
}
