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

import "time"

// Attributes - Additional attributes specific to Neon Resources
type Attributes struct {
	// REQUIRED; Name of the attribute
	Name *string

	// REQUIRED; Value of the attribute
	Value *string
}

// Branch - The Branch resource type.
type Branch struct {
	// The resource-specific properties for this resource.
	Properties *BranchProperties

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

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

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

// BranchProperties - Properties specific to Branch
type BranchProperties struct {
	// Additional attributes for the entity
	Attributes []*Attributes

	// Database name associated with the branch
	DatabaseName *string

	// Neon Databases associated with the branch
	Databases []*NeonDatabaseProperties

	// Endpoints associated with the branch
	Endpoints []*EndpointProperties

	// Name of the resource
	EntityName *string

	// The ID of the parent branch
	ParentID *string

	// The ID of the project this branch belongs to
	ProjectID *string

	// Role name associated with the branch
	RoleName *string

	// Roles associated with the branch
	Roles []*NeonRoleProperties

	// READ-ONLY; Timestamp indicating when the entity was created
	CreatedAt *string

	// READ-ONLY; Unique identifier for the entity
	EntityID *string

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

// CompanyDetails - Company details for an organization
type CompanyDetails struct {
	// Business phone number of the company
	BusinessPhone *string

	// Company name
	CompanyName *string

	// Country name of the company
	Country *string

	// Domain of the user
	Domain *string

	// Number of employees in the company
	NumberOfEmployees *int64

	// Office address of the company
	OfficeAddress *string
}

// Compute - The Compute resource type.
type Compute struct {
	// The resource-specific properties for this resource.
	Properties *ComputeProperties

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

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

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

// ComputeProperties - Properties specific to Compute
type ComputeProperties struct {
	// Additional attributes for the entity
	Attributes []*Attributes

	// Number of allocated CPU cores
	CPUCores *int32

	// Name of the resource
	EntityName *string

	// Memory allocated in GB
	Memory *int32

	// Region where the compute instance is located
	Region *string

	// Current status of the compute instance
	Status *string

	// READ-ONLY; Timestamp indicating when the entity was created
	CreatedAt *string

	// READ-ONLY; Unique identifier for the entity
	EntityID *string

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

// ConnectionURIProperties - Connection uri parameters for the associated database
type ConnectionURIProperties struct {
	// Branch Id associated with this connection
	BranchID *string

	// Database name associated with this connection
	DatabaseName *string

	// the endpoint Id with this connection
	EndpointID *string

	// Indicates if the connection is pooled
	IsPooled *bool

	// Project Id associated with this connection
	ProjectID *string

	// The role name used for authentication
	RoleName *string

	// READ-ONLY; connection uri returned for the database
	ConnectionStringURI *string
}

// DefaultEndpointSettings - Default Endpoint Settings for the project.
type DefaultEndpointSettings struct {
	// REQUIRED; Maximum compute units for autoscaling.
	AutoscalingLimitMaxCu *float32

	// REQUIRED; Minimum compute units for autoscaling.
	AutoscalingLimitMinCu *float32
}

// Endpoint - The Neon compute endpoint resource type.
type Endpoint struct {
	// The resource-specific properties for this resource.
	Properties *EndpointProperties

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

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

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

// EndpointProperties - Properties specific to Endpoints
type EndpointProperties struct {
	// Additional attributes for the entity
	Attributes []*Attributes

	// The ID of the branch this endpoint belongs to
	BranchID *string

	// The type of the endpoint
	EndpointType *EndpointType

	// Name of the resource
	EntityName *string

	// The ID of the project this endpoint belongs to
	ProjectID *string

	// READ-ONLY; Timestamp indicating when the entity was created
	CreatedAt *string

	// READ-ONLY; Unique identifier for the entity
	EntityID *string

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

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

	// SaaS subscription id for the the marketplace offer
	SubscriptionID *string

	// Marketplace subscription status
	SubscriptionStatus *MarketplaceSubscriptionStatus
}

// NeonDatabase - The Neon Database resource type.
type NeonDatabase struct {
	// The resource-specific properties for this resource.
	Properties *NeonDatabaseProperties

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

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

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

// NeonDatabaseProperties - Properties specific to Databases
type NeonDatabaseProperties struct {
	// Additional attributes for the entity
	Attributes []*Attributes

	// The ID of the branch this database belongs to
	BranchID *string

	// Name of the resource
	EntityName *string

	// The name of the role that owns the database
	OwnerName *string

	// READ-ONLY; Timestamp indicating when the entity was created
	CreatedAt *string

	// READ-ONLY; Unique identifier for the entity
	EntityID *string

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

// NeonRole - The Neon Role resource type.
type NeonRole struct {
	// The resource-specific properties for this resource.
	Properties *NeonRoleProperties

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

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

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

// NeonRoleProperties - Properties specific to Roles
type NeonRoleProperties struct {
	// Additional attributes for the entity
	Attributes []*Attributes

	// The ID of the branch this role belongs to
	BranchID *string

	// Name of the resource
	EntityName *string

	// Indicates whether the role has superuser privileges
	IsSuperUser *bool

	// Permissions assigned to the role
	Permissions []*string

	// READ-ONLY; Timestamp indicating when the entity was created
	CreatedAt *string

	// READ-ONLY; Unique identifier for the entity
	EntityID *string

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

// 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; Plan Id for the marketplace offer
	PlanID *string

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

	// Plan Name for the marketplace offer
	PlanName *string

	// Term Id for the marketplace offer
	TermID *string

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

// OrganizationProperties - Properties specific to Neon Organization resource
type OrganizationProperties struct {
	// REQUIRED; Details of the company.
	CompanyDetails *CompanyDetails

	// REQUIRED; Marketplace details of the resource.
	MarketplaceDetails *MarketplaceDetails

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

	// Neon Organization properties
	PartnerOrganizationProperties *PartnerOrganizationProperties

	// Neon Project Properties
	ProjectProperties *ProjectProperties

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

// OrganizationResource - Organization Resource by Neon
type OrganizationResource struct {
	// REQUIRED; The geo-location where the resource lives
	Location *string

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

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

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

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

// PartnerOrganizationProperties - Properties specific to Partner's organization
type PartnerOrganizationProperties struct {
	// REQUIRED; Organization name in partner's system
	OrganizationName *string

	// Organization Id in partner's system
	OrganizationID *string

	// Single Sign On properties for the organization
	SingleSignOnProperties *SingleSignOnProperties
}

// PgVersion - PostgreSQL Version model
type PgVersion struct {
	// The major PostgreSQL version number
	Version *int32
}

// PgVersionsResult - Response model for PostgreSQL versions
type PgVersionsResult struct {
	// REQUIRED; List of PostgreSQL versions
	Versions []*PgVersion
}

// Project - The Project resource type.
type Project struct {
	// The resource-specific properties for this resource.
	Properties *ProjectProperties

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

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

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

// ProjectProperties - Properties specific to Project
type ProjectProperties struct {
	// Additional attributes for the entity
	Attributes []*Attributes

	// The Branch properties of the project. This is optional
	Branch *BranchProperties

	// Neon Databases associated with the project
	Databases []*NeonDatabaseProperties

	// Default endpoint settings for the project.
	DefaultEndpointSettings *DefaultEndpointSettings

	// Endpoints associated with the project
	Endpoints []*EndpointProperties

	// Name of the resource
	EntityName *string

	// The retention period for project history in seconds.
	HistoryRetention *int32

	// Postgres version for the project
	PgVersion *int32

	// Region where the project is created
	RegionID *string

	// Roles associated with the project
	Roles []*NeonRoleProperties

	// Data Storage bytes per hour for the project
	Storage *int64

	// READ-ONLY; Timestamp indicating when the entity was created
	CreatedAt *string

	// READ-ONLY; Unique identifier for the entity
	EntityID *string

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

// SingleSignOnProperties - Properties specific to Single Sign On Resource
type SingleSignOnProperties struct {
	// List of AAD domains fetched from Microsoft Graph for user.
	AADDomains []*string

	// AAD enterprise application Id used to setup SSO
	EnterpriseAppID *string

	// State of the Single Sign On for the organization
	SingleSignOnState *SingleSignOnStates

	// URL for SSO to be used by the partner to redirect the user to their system
	SingleSignOnURL *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
}

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