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

import (
	"github.com/Azure/azure-sdk-for-go/sdk/azcore"
	"github.com/Azure/azure-sdk-for-go/sdk/azcore/arm"
)

// ClientFactory is a client factory used to create any client in this module.
// Don't use this type directly, use NewClientFactory instead.
type ClientFactory struct {
	subscriptionID string
	internal       *arm.Client
}

// NewClientFactory creates a new instance of ClientFactory with the specified values.
// The parameter values will be propagated to any client created from this factory.
//   - subscriptionID - The ID of the target subscription. The value must be an UUID.
//   - credential - used to authorize requests. Usually a credential from azidentity.
//   - options - pass nil to accept the default values.
func NewClientFactory(subscriptionID string, credential azcore.TokenCredential, options *arm.ClientOptions) (*ClientFactory, error) {
	internal, err := arm.NewClient(moduleName, moduleVersion, credential, options)
	if err != nil {
		return nil, err
	}
	return &ClientFactory{
		subscriptionID: subscriptionID,
		internal:       internal,
	}, nil
}

// NewConfigTemplateVersionsClient creates a new instance of ConfigTemplateVersionsClient.
func (c *ClientFactory) NewConfigTemplateVersionsClient() *ConfigTemplateVersionsClient {
	return &ConfigTemplateVersionsClient{
		subscriptionID: c.subscriptionID,
		internal:       c.internal,
	}
}

// NewConfigTemplatesClient creates a new instance of ConfigTemplatesClient.
func (c *ClientFactory) NewConfigTemplatesClient() *ConfigTemplatesClient {
	return &ConfigTemplatesClient{
		subscriptionID: c.subscriptionID,
		internal:       c.internal,
	}
}

// NewContextsClient creates a new instance of ContextsClient.
func (c *ClientFactory) NewContextsClient() *ContextsClient {
	return &ContextsClient{
		subscriptionID: c.subscriptionID,
		internal:       c.internal,
	}
}

// NewDiagnosticsClient creates a new instance of DiagnosticsClient.
func (c *ClientFactory) NewDiagnosticsClient() *DiagnosticsClient {
	return &DiagnosticsClient{
		subscriptionID: c.subscriptionID,
		internal:       c.internal,
	}
}

// NewDynamicSchemaVersionsClient creates a new instance of DynamicSchemaVersionsClient.
func (c *ClientFactory) NewDynamicSchemaVersionsClient() *DynamicSchemaVersionsClient {
	return &DynamicSchemaVersionsClient{
		subscriptionID: c.subscriptionID,
		internal:       c.internal,
	}
}

// NewDynamicSchemasClient creates a new instance of DynamicSchemasClient.
func (c *ClientFactory) NewDynamicSchemasClient() *DynamicSchemasClient {
	return &DynamicSchemasClient{
		subscriptionID: c.subscriptionID,
		internal:       c.internal,
	}
}

// NewExecutionsClient creates a new instance of ExecutionsClient.
func (c *ClientFactory) NewExecutionsClient() *ExecutionsClient {
	return &ExecutionsClient{
		subscriptionID: c.subscriptionID,
		internal:       c.internal,
	}
}

// NewInstanceHistoriesClient creates a new instance of InstanceHistoriesClient.
func (c *ClientFactory) NewInstanceHistoriesClient() *InstanceHistoriesClient {
	return &InstanceHistoriesClient{
		subscriptionID: c.subscriptionID,
		internal:       c.internal,
	}
}

// NewInstancesClient creates a new instance of InstancesClient.
func (c *ClientFactory) NewInstancesClient() *InstancesClient {
	return &InstancesClient{
		subscriptionID: c.subscriptionID,
		internal:       c.internal,
	}
}

// NewJobsClient creates a new instance of JobsClient.
func (c *ClientFactory) NewJobsClient() *JobsClient {
	return &JobsClient{
		internal: c.internal,
	}
}

// NewSchemaReferencesClient creates a new instance of SchemaReferencesClient.
func (c *ClientFactory) NewSchemaReferencesClient() *SchemaReferencesClient {
	return &SchemaReferencesClient{
		internal: c.internal,
	}
}

// NewSchemaVersionsClient creates a new instance of SchemaVersionsClient.
func (c *ClientFactory) NewSchemaVersionsClient() *SchemaVersionsClient {
	return &SchemaVersionsClient{
		subscriptionID: c.subscriptionID,
		internal:       c.internal,
	}
}

// NewSchemasClient creates a new instance of SchemasClient.
func (c *ClientFactory) NewSchemasClient() *SchemasClient {
	return &SchemasClient{
		subscriptionID: c.subscriptionID,
		internal:       c.internal,
	}
}

// NewSiteReferencesClient creates a new instance of SiteReferencesClient.
func (c *ClientFactory) NewSiteReferencesClient() *SiteReferencesClient {
	return &SiteReferencesClient{
		subscriptionID: c.subscriptionID,
		internal:       c.internal,
	}
}

// NewSolutionTemplateVersionsClient creates a new instance of SolutionTemplateVersionsClient.
func (c *ClientFactory) NewSolutionTemplateVersionsClient() *SolutionTemplateVersionsClient {
	return &SolutionTemplateVersionsClient{
		subscriptionID: c.subscriptionID,
		internal:       c.internal,
	}
}

// NewSolutionTemplatesClient creates a new instance of SolutionTemplatesClient.
func (c *ClientFactory) NewSolutionTemplatesClient() *SolutionTemplatesClient {
	return &SolutionTemplatesClient{
		subscriptionID: c.subscriptionID,
		internal:       c.internal,
	}
}

// NewSolutionVersionsClient creates a new instance of SolutionVersionsClient.
func (c *ClientFactory) NewSolutionVersionsClient() *SolutionVersionsClient {
	return &SolutionVersionsClient{
		subscriptionID: c.subscriptionID,
		internal:       c.internal,
	}
}

// NewSolutionsClient creates a new instance of SolutionsClient.
func (c *ClientFactory) NewSolutionsClient() *SolutionsClient {
	return &SolutionsClient{
		subscriptionID: c.subscriptionID,
		internal:       c.internal,
	}
}

// NewTargetsClient creates a new instance of TargetsClient.
func (c *ClientFactory) NewTargetsClient() *TargetsClient {
	return &TargetsClient{
		subscriptionID: c.subscriptionID,
		internal:       c.internal,
	}
}

// NewWorkflowVersionsClient creates a new instance of WorkflowVersionsClient.
func (c *ClientFactory) NewWorkflowVersionsClient() *WorkflowVersionsClient {
	return &WorkflowVersionsClient{
		subscriptionID: c.subscriptionID,
		internal:       c.internal,
	}
}

// NewWorkflowsClient creates a new instance of WorkflowsClient.
func (c *ClientFactory) NewWorkflowsClient() *WorkflowsClient {
	return &WorkflowsClient{
		subscriptionID: c.subscriptionID,
		internal:       c.internal,
	}
}
