// Code generated by go-swagger; DO NOT EDIT.

package client

// This file was generated by the swagger tool.
// Editing this file might prove futile when you re-run the swagger generate command

import (
	"github.com/go-openapi/runtime"
	httptransport "github.com/go-openapi/runtime/client"
	"github.com/go-openapi/strfmt"

	"git.coopcloud.tech/decentral1se/gtslib/client/accounts"
	"git.coopcloud.tech/decentral1se/gtslib/client/admin"
	"git.coopcloud.tech/decentral1se/gtslib/client/apps"
	"git.coopcloud.tech/decentral1se/gtslib/client/blocks"
	"git.coopcloud.tech/decentral1se/gtslib/client/bookmarks"
	"git.coopcloud.tech/decentral1se/gtslib/client/conversations"
	"git.coopcloud.tech/decentral1se/gtslib/client/custom_emojis"
	"git.coopcloud.tech/decentral1se/gtslib/client/debug"
	"git.coopcloud.tech/decentral1se/gtslib/client/favourites"
	"git.coopcloud.tech/decentral1se/gtslib/client/featured_tags"
	"git.coopcloud.tech/decentral1se/gtslib/client/federation"
	"git.coopcloud.tech/decentral1se/gtslib/client/filters"
	"git.coopcloud.tech/decentral1se/gtslib/client/follow_requests"
	"git.coopcloud.tech/decentral1se/gtslib/client/health"
	"git.coopcloud.tech/decentral1se/gtslib/client/instance"
	"git.coopcloud.tech/decentral1se/gtslib/client/interaction_policies"
	"git.coopcloud.tech/decentral1se/gtslib/client/lists"
	"git.coopcloud.tech/decentral1se/gtslib/client/markers"
	"git.coopcloud.tech/decentral1se/gtslib/client/media"
	"git.coopcloud.tech/decentral1se/gtslib/client/mutes"
	"git.coopcloud.tech/decentral1se/gtslib/client/nodeinfo"
	"git.coopcloud.tech/decentral1se/gtslib/client/notifications"
	"git.coopcloud.tech/decentral1se/gtslib/client/nr_well_known"
	"git.coopcloud.tech/decentral1se/gtslib/client/polls"
	"git.coopcloud.tech/decentral1se/gtslib/client/preferences"
	"git.coopcloud.tech/decentral1se/gtslib/client/reports"
	"git.coopcloud.tech/decentral1se/gtslib/client/search"
	"git.coopcloud.tech/decentral1se/gtslib/client/statuses"
	"git.coopcloud.tech/decentral1se/gtslib/client/streaming"
	"git.coopcloud.tech/decentral1se/gtslib/client/timelines"
	"git.coopcloud.tech/decentral1se/gtslib/client/user"
)

// Default go to social swagger documentation HTTP client.
var Default = NewHTTPClient(nil)

const (
	// DefaultHost is the default Host
	// found in Meta (info) section of spec file
	DefaultHost string = "example.org"
	// DefaultBasePath is the default BasePath
	// found in Meta (info) section of spec file
	DefaultBasePath string = "/"
)

// DefaultSchemes are the default schemes found in Meta (info) section of spec file
var DefaultSchemes = []string{"http", "https", "wss"}

// NewHTTPClient creates a new go to social swagger documentation HTTP client.
func NewHTTPClient(formats strfmt.Registry) *GoToSocialSwaggerDocumentation {
	return NewHTTPClientWithConfig(formats, nil)
}

// NewHTTPClientWithConfig creates a new go to social swagger documentation HTTP client,
// using a customizable transport config.
func NewHTTPClientWithConfig(formats strfmt.Registry, cfg *TransportConfig) *GoToSocialSwaggerDocumentation {
	// ensure nullable parameters have default
	if cfg == nil {
		cfg = DefaultTransportConfig()
	}

	// create transport and client
	transport := httptransport.New(cfg.Host, cfg.BasePath, cfg.Schemes)
	return New(transport, formats)
}

// New creates a new go to social swagger documentation client
func New(transport runtime.ClientTransport, formats strfmt.Registry) *GoToSocialSwaggerDocumentation {
	// ensure nullable parameters have default
	if formats == nil {
		formats = strfmt.Default
	}

	cli := new(GoToSocialSwaggerDocumentation)
	cli.Transport = transport
	cli.Accounts = accounts.New(transport, formats)
	cli.Admin = admin.New(transport, formats)
	cli.Apps = apps.New(transport, formats)
	cli.Blocks = blocks.New(transport, formats)
	cli.Bookmarks = bookmarks.New(transport, formats)
	cli.Conversations = conversations.New(transport, formats)
	cli.CustomEmojis = custom_emojis.New(transport, formats)
	cli.Debug = debug.New(transport, formats)
	cli.Favourites = favourites.New(transport, formats)
	cli.FeaturedTags = featured_tags.New(transport, formats)
	cli.Federation = federation.New(transport, formats)
	cli.Filters = filters.New(transport, formats)
	cli.FollowRequests = follow_requests.New(transport, formats)
	cli.Health = health.New(transport, formats)
	cli.Instance = instance.New(transport, formats)
	cli.InteractionPolicies = interaction_policies.New(transport, formats)
	cli.Lists = lists.New(transport, formats)
	cli.Markers = markers.New(transport, formats)
	cli.Media = media.New(transport, formats)
	cli.Mutes = mutes.New(transport, formats)
	cli.Nodeinfo = nodeinfo.New(transport, formats)
	cli.Notifications = notifications.New(transport, formats)
	cli.NrWellKnown = nr_well_known.New(transport, formats)
	cli.Polls = polls.New(transport, formats)
	cli.Preferences = preferences.New(transport, formats)
	cli.Reports = reports.New(transport, formats)
	cli.Search = search.New(transport, formats)
	cli.Statuses = statuses.New(transport, formats)
	cli.Streaming = streaming.New(transport, formats)
	cli.Timelines = timelines.New(transport, formats)
	cli.User = user.New(transport, formats)
	return cli
}

// DefaultTransportConfig creates a TransportConfig with the
// default settings taken from the meta section of the spec file.
func DefaultTransportConfig() *TransportConfig {
	return &TransportConfig{
		Host:     DefaultHost,
		BasePath: DefaultBasePath,
		Schemes:  DefaultSchemes,
	}
}

// TransportConfig contains the transport related info,
// found in the meta section of the spec file.
type TransportConfig struct {
	Host     string
	BasePath string
	Schemes  []string
}

// WithHost overrides the default host,
// provided by the meta section of the spec file.
func (cfg *TransportConfig) WithHost(host string) *TransportConfig {
	cfg.Host = host
	return cfg
}

// WithBasePath overrides the default basePath,
// provided by the meta section of the spec file.
func (cfg *TransportConfig) WithBasePath(basePath string) *TransportConfig {
	cfg.BasePath = basePath
	return cfg
}

// WithSchemes overrides the default schemes,
// provided by the meta section of the spec file.
func (cfg *TransportConfig) WithSchemes(schemes []string) *TransportConfig {
	cfg.Schemes = schemes
	return cfg
}

// GoToSocialSwaggerDocumentation is a client for go to social swagger documentation
type GoToSocialSwaggerDocumentation struct {
	Accounts accounts.ClientService

	Admin admin.ClientService

	Apps apps.ClientService

	Blocks blocks.ClientService

	Bookmarks bookmarks.ClientService

	Conversations conversations.ClientService

	CustomEmojis custom_emojis.ClientService

	Debug debug.ClientService

	Favourites favourites.ClientService

	FeaturedTags featured_tags.ClientService

	Federation federation.ClientService

	Filters filters.ClientService

	FollowRequests follow_requests.ClientService

	Health health.ClientService

	Instance instance.ClientService

	InteractionPolicies interaction_policies.ClientService

	Lists lists.ClientService

	Markers markers.ClientService

	Media media.ClientService

	Mutes mutes.ClientService

	Nodeinfo nodeinfo.ClientService

	Notifications notifications.ClientService

	NrWellKnown nr_well_known.ClientService

	Polls polls.ClientService

	Preferences preferences.ClientService

	Reports reports.ClientService

	Search search.ClientService

	Statuses statuses.ClientService

	Streaming streaming.ClientService

	Timelines timelines.ClientService

	User user.ClientService

	Transport runtime.ClientTransport
}

// SetTransport changes the transport on the client and all its subresources
func (c *GoToSocialSwaggerDocumentation) SetTransport(transport runtime.ClientTransport) {
	c.Transport = transport
	c.Accounts.SetTransport(transport)
	c.Admin.SetTransport(transport)
	c.Apps.SetTransport(transport)
	c.Blocks.SetTransport(transport)
	c.Bookmarks.SetTransport(transport)
	c.Conversations.SetTransport(transport)
	c.CustomEmojis.SetTransport(transport)
	c.Debug.SetTransport(transport)
	c.Favourites.SetTransport(transport)
	c.FeaturedTags.SetTransport(transport)
	c.Federation.SetTransport(transport)
	c.Filters.SetTransport(transport)
	c.FollowRequests.SetTransport(transport)
	c.Health.SetTransport(transport)
	c.Instance.SetTransport(transport)
	c.InteractionPolicies.SetTransport(transport)
	c.Lists.SetTransport(transport)
	c.Markers.SetTransport(transport)
	c.Media.SetTransport(transport)
	c.Mutes.SetTransport(transport)
	c.Nodeinfo.SetTransport(transport)
	c.Notifications.SetTransport(transport)
	c.NrWellKnown.SetTransport(transport)
	c.Polls.SetTransport(transport)
	c.Preferences.SetTransport(transport)
	c.Reports.SetTransport(transport)
	c.Search.SetTransport(transport)
	c.Statuses.SetTransport(transport)
	c.Streaming.SetTransport(transport)
	c.Timelines.SetTransport(transport)
	c.User.SetTransport(transport)
}
