/*
Management API

API version: 3
*/

// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.

package management

import (
	"github.com/adyen/adyen-go-api-library/v21/src/common"
)

// APIClient manages communication with the Management API API v3
// In most cases there should be only one, shared, APIClient.
type APIClient struct {
	common common.Service // Reuse a single struct instead of allocating one for each service on the heap.

	// API Services

	APICredentialsCompanyLevelApi *APICredentialsCompanyLevelApi

	APICredentialsMerchantLevelApi *APICredentialsMerchantLevelApi

	APIKeyCompanyLevelApi *APIKeyCompanyLevelApi

	APIKeyMerchantLevelApi *APIKeyMerchantLevelApi

	AccountCompanyLevelApi *AccountCompanyLevelApi

	AccountMerchantLevelApi *AccountMerchantLevelApi

	AccountStoreLevelApi *AccountStoreLevelApi

	AllowedOriginsCompanyLevelApi *AllowedOriginsCompanyLevelApi

	AllowedOriginsMerchantLevelApi *AllowedOriginsMerchantLevelApi

	AndroidFilesCompanyLevelApi *AndroidFilesCompanyLevelApi

	ClientKeyCompanyLevelApi *ClientKeyCompanyLevelApi

	ClientKeyMerchantLevelApi *ClientKeyMerchantLevelApi

	MyAPICredentialApi *MyAPICredentialApi

	PaymentMethodsMerchantLevelApi *PaymentMethodsMerchantLevelApi

	PayoutSettingsMerchantLevelApi *PayoutSettingsMerchantLevelApi

	SplitConfigurationMerchantLevelApi *SplitConfigurationMerchantLevelApi

	TerminalActionsCompanyLevelApi *TerminalActionsCompanyLevelApi

	TerminalActionsTerminalLevelApi *TerminalActionsTerminalLevelApi

	TerminalOrdersCompanyLevelApi *TerminalOrdersCompanyLevelApi

	TerminalOrdersMerchantLevelApi *TerminalOrdersMerchantLevelApi

	TerminalSettingsCompanyLevelApi *TerminalSettingsCompanyLevelApi

	TerminalSettingsMerchantLevelApi *TerminalSettingsMerchantLevelApi

	TerminalSettingsStoreLevelApi *TerminalSettingsStoreLevelApi

	TerminalSettingsTerminalLevelApi *TerminalSettingsTerminalLevelApi

	TerminalsTerminalLevelApi *TerminalsTerminalLevelApi

	UsersCompanyLevelApi *UsersCompanyLevelApi

	UsersMerchantLevelApi *UsersMerchantLevelApi

	WebhooksCompanyLevelApi *WebhooksCompanyLevelApi

	WebhooksMerchantLevelApi *WebhooksMerchantLevelApi
}

// NewAPIClient creates a new API client.
func NewAPIClient(client *common.Client) *APIClient {
	c := &APIClient{}
	c.common.Client = client
	c.common.BasePath = func() string {
		return client.Cfg.ManagementEndpoint
	}

	// API Services
	c.APICredentialsCompanyLevelApi = (*APICredentialsCompanyLevelApi)(&c.common)
	c.APICredentialsMerchantLevelApi = (*APICredentialsMerchantLevelApi)(&c.common)
	c.APIKeyCompanyLevelApi = (*APIKeyCompanyLevelApi)(&c.common)
	c.APIKeyMerchantLevelApi = (*APIKeyMerchantLevelApi)(&c.common)
	c.AccountCompanyLevelApi = (*AccountCompanyLevelApi)(&c.common)
	c.AccountMerchantLevelApi = (*AccountMerchantLevelApi)(&c.common)
	c.AccountStoreLevelApi = (*AccountStoreLevelApi)(&c.common)
	c.AllowedOriginsCompanyLevelApi = (*AllowedOriginsCompanyLevelApi)(&c.common)
	c.AllowedOriginsMerchantLevelApi = (*AllowedOriginsMerchantLevelApi)(&c.common)
	c.AndroidFilesCompanyLevelApi = (*AndroidFilesCompanyLevelApi)(&c.common)
	c.ClientKeyCompanyLevelApi = (*ClientKeyCompanyLevelApi)(&c.common)
	c.ClientKeyMerchantLevelApi = (*ClientKeyMerchantLevelApi)(&c.common)
	c.MyAPICredentialApi = (*MyAPICredentialApi)(&c.common)
	c.PaymentMethodsMerchantLevelApi = (*PaymentMethodsMerchantLevelApi)(&c.common)
	c.PayoutSettingsMerchantLevelApi = (*PayoutSettingsMerchantLevelApi)(&c.common)
	c.SplitConfigurationMerchantLevelApi = (*SplitConfigurationMerchantLevelApi)(&c.common)
	c.TerminalActionsCompanyLevelApi = (*TerminalActionsCompanyLevelApi)(&c.common)
	c.TerminalActionsTerminalLevelApi = (*TerminalActionsTerminalLevelApi)(&c.common)
	c.TerminalOrdersCompanyLevelApi = (*TerminalOrdersCompanyLevelApi)(&c.common)
	c.TerminalOrdersMerchantLevelApi = (*TerminalOrdersMerchantLevelApi)(&c.common)
	c.TerminalSettingsCompanyLevelApi = (*TerminalSettingsCompanyLevelApi)(&c.common)
	c.TerminalSettingsMerchantLevelApi = (*TerminalSettingsMerchantLevelApi)(&c.common)
	c.TerminalSettingsStoreLevelApi = (*TerminalSettingsStoreLevelApi)(&c.common)
	c.TerminalSettingsTerminalLevelApi = (*TerminalSettingsTerminalLevelApi)(&c.common)
	c.TerminalsTerminalLevelApi = (*TerminalsTerminalLevelApi)(&c.common)
	c.UsersCompanyLevelApi = (*UsersCompanyLevelApi)(&c.common)
	c.UsersMerchantLevelApi = (*UsersMerchantLevelApi)(&c.common)
	c.WebhooksCompanyLevelApi = (*WebhooksCompanyLevelApi)(&c.common)
	c.WebhooksMerchantLevelApi = (*WebhooksMerchantLevelApi)(&c.common)

	return c
}
