// Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.

package operations

import (
	"github.com/LukeHagar/plexgo/internal/utils"
	"github.com/LukeHagar/plexgo/models/components"
	"net/http"
)

type GetTemplateGlobals struct {
	// Indicates the client accepts the indicated media types
	Accepts *components.Accepts `default:"application/xml" header:"style=simple,explode=false,name=accepts"`
	// An opaque identifier unique to the client
	ClientIdentifier *string `header:"style=simple,explode=false,name=X-Plex-Client-Identifier"`
	// The name of the client product
	Product *string `header:"style=simple,explode=false,name=X-Plex-Product"`
	// The version of the client application
	Version *string `header:"style=simple,explode=false,name=X-Plex-Version"`
	// The platform of the client
	Platform *string `header:"style=simple,explode=false,name=X-Plex-Platform"`
	// The version of the platform
	PlatformVersion *string `header:"style=simple,explode=false,name=X-Plex-Platform-Version"`
	// A relatively friendly name for the client device
	Device *string `header:"style=simple,explode=false,name=X-Plex-Device"`
	// A potentially less friendly identifier for the device model
	Model *string `header:"style=simple,explode=false,name=X-Plex-Model"`
	// The device vendor
	DeviceVendor *string `header:"style=simple,explode=false,name=X-Plex-Device-Vendor"`
	// A friendly name for the client
	DeviceName *string `header:"style=simple,explode=false,name=X-Plex-Device-Name"`
	// The marketplace on which the client application is distributed
	Marketplace *string `header:"style=simple,explode=false,name=X-Plex-Marketplace"`
}

func (g GetTemplateGlobals) MarshalJSON() ([]byte, error) {
	return utils.MarshalJSON(g, "", false)
}

func (g *GetTemplateGlobals) UnmarshalJSON(data []byte) error {
	if err := utils.UnmarshalJSON(data, &g, "", false, nil); err != nil {
		return err
	}
	return nil
}

func (g *GetTemplateGlobals) GetAccepts() *components.Accepts {
	if g == nil {
		return nil
	}
	return g.Accepts
}

func (g *GetTemplateGlobals) GetClientIdentifier() *string {
	if g == nil {
		return nil
	}
	return g.ClientIdentifier
}

func (g *GetTemplateGlobals) GetProduct() *string {
	if g == nil {
		return nil
	}
	return g.Product
}

func (g *GetTemplateGlobals) GetVersion() *string {
	if g == nil {
		return nil
	}
	return g.Version
}

func (g *GetTemplateGlobals) GetPlatform() *string {
	if g == nil {
		return nil
	}
	return g.Platform
}

func (g *GetTemplateGlobals) GetPlatformVersion() *string {
	if g == nil {
		return nil
	}
	return g.PlatformVersion
}

func (g *GetTemplateGlobals) GetDevice() *string {
	if g == nil {
		return nil
	}
	return g.Device
}

func (g *GetTemplateGlobals) GetModel() *string {
	if g == nil {
		return nil
	}
	return g.Model
}

func (g *GetTemplateGlobals) GetDeviceVendor() *string {
	if g == nil {
		return nil
	}
	return g.DeviceVendor
}

func (g *GetTemplateGlobals) GetDeviceName() *string {
	if g == nil {
		return nil
	}
	return g.DeviceName
}

func (g *GetTemplateGlobals) GetMarketplace() *string {
	if g == nil {
		return nil
	}
	return g.Marketplace
}

type GetTemplateRequest struct {
	// Indicates the client accepts the indicated media types
	Accepts *components.Accepts `default:"application/xml" header:"style=simple,explode=false,name=accepts"`
	// An opaque identifier unique to the client
	ClientIdentifier *string `header:"style=simple,explode=false,name=X-Plex-Client-Identifier"`
	// The name of the client product
	Product *string `header:"style=simple,explode=false,name=X-Plex-Product"`
	// The version of the client application
	Version *string `header:"style=simple,explode=false,name=X-Plex-Version"`
	// The platform of the client
	Platform *string `header:"style=simple,explode=false,name=X-Plex-Platform"`
	// The version of the platform
	PlatformVersion *string `header:"style=simple,explode=false,name=X-Plex-Platform-Version"`
	// A relatively friendly name for the client device
	Device *string `header:"style=simple,explode=false,name=X-Plex-Device"`
	// A potentially less friendly identifier for the device model
	Model *string `header:"style=simple,explode=false,name=X-Plex-Model"`
	// The device vendor
	DeviceVendor *string `header:"style=simple,explode=false,name=X-Plex-Device-Vendor"`
	// A friendly name for the client
	DeviceName *string `header:"style=simple,explode=false,name=X-Plex-Device-Name"`
	// The marketplace on which the client application is distributed
	Marketplace *string `header:"style=simple,explode=false,name=X-Plex-Marketplace"`
	// The guid of the item for which to get the template
	GUID *string `queryParam:"style=form,explode=true,name=guid"`
}

func (g GetTemplateRequest) MarshalJSON() ([]byte, error) {
	return utils.MarshalJSON(g, "", false)
}

func (g *GetTemplateRequest) UnmarshalJSON(data []byte) error {
	if err := utils.UnmarshalJSON(data, &g, "", false, nil); err != nil {
		return err
	}
	return nil
}

func (g *GetTemplateRequest) GetAccepts() *components.Accepts {
	if g == nil {
		return nil
	}
	return g.Accepts
}

func (g *GetTemplateRequest) GetClientIdentifier() *string {
	if g == nil {
		return nil
	}
	return g.ClientIdentifier
}

func (g *GetTemplateRequest) GetProduct() *string {
	if g == nil {
		return nil
	}
	return g.Product
}

func (g *GetTemplateRequest) GetVersion() *string {
	if g == nil {
		return nil
	}
	return g.Version
}

func (g *GetTemplateRequest) GetPlatform() *string {
	if g == nil {
		return nil
	}
	return g.Platform
}

func (g *GetTemplateRequest) GetPlatformVersion() *string {
	if g == nil {
		return nil
	}
	return g.PlatformVersion
}

func (g *GetTemplateRequest) GetDevice() *string {
	if g == nil {
		return nil
	}
	return g.Device
}

func (g *GetTemplateRequest) GetModel() *string {
	if g == nil {
		return nil
	}
	return g.Model
}

func (g *GetTemplateRequest) GetDeviceVendor() *string {
	if g == nil {
		return nil
	}
	return g.DeviceVendor
}

func (g *GetTemplateRequest) GetDeviceName() *string {
	if g == nil {
		return nil
	}
	return g.DeviceName
}

func (g *GetTemplateRequest) GetMarketplace() *string {
	if g == nil {
		return nil
	}
	return g.Marketplace
}

func (g *GetTemplateRequest) GetGUID() *string {
	if g == nil {
		return nil
	}
	return g.GUID
}

// MediaSubscription - A media subscription contains a representation of metadata desired to be recorded
type MediaSubscription struct {
	// The title of this subscription type
	Title *string `json:"title,omitempty"`
	// Metadata type number
	Type        *int64  `json:"type,omitempty"`
	AiringsType *string `json:"airingsType,omitempty"`
	CreatedAt   *int64  `json:"createdAt,omitempty"`
	// Media Matching Hints
	Directory map[string]any `json:"Directory,omitempty"`
	// Only included if `includeStorage` is specified
	DurationTotal       *int64                          `json:"durationTotal,omitempty"`
	Key                 *string                         `json:"key,omitempty"`
	LibrarySectionTitle *string                         `json:"librarySectionTitle,omitempty"`
	LocationPath        *string                         `json:"locationPath,omitempty"`
	MediaGrabOperation  []components.MediaGrabOperation `json:"MediaGrabOperation,omitempty"`
	// Media Matching Hints
	Playlist map[string]any       `json:"Playlist,omitempty"`
	Setting  []components.Setting `json:"Setting,omitempty"`
	// Only included if `includeStorage` is specified
	StorageTotal *int64 `json:"storageTotal,omitempty"`
	// Where this subscription will record to
	TargetLibrarySectionID *int64 `json:"targetLibrarySectionID,omitempty"`
	// The library section location id for where the item is to be recorded
	TargetSectionLocationID *int64 `json:"targetSectionLocationID,omitempty"`
	// Media Matching Hints
	Video map[string]any `json:"Video,omitempty"`
	// Parameter string for creating this subscription
	Parameters *string `json:"parameters,omitempty"`
	Selected   *bool   `json:"selected,omitempty"`
}

func (m *MediaSubscription) GetTitle() *string {
	if m == nil {
		return nil
	}
	return m.Title
}

func (m *MediaSubscription) GetType() *int64 {
	if m == nil {
		return nil
	}
	return m.Type
}

func (m *MediaSubscription) GetAiringsType() *string {
	if m == nil {
		return nil
	}
	return m.AiringsType
}

func (m *MediaSubscription) GetCreatedAt() *int64 {
	if m == nil {
		return nil
	}
	return m.CreatedAt
}

func (m *MediaSubscription) GetDirectory() map[string]any {
	if m == nil {
		return nil
	}
	return m.Directory
}

func (m *MediaSubscription) GetDurationTotal() *int64 {
	if m == nil {
		return nil
	}
	return m.DurationTotal
}

func (m *MediaSubscription) GetKey() *string {
	if m == nil {
		return nil
	}
	return m.Key
}

func (m *MediaSubscription) GetLibrarySectionTitle() *string {
	if m == nil {
		return nil
	}
	return m.LibrarySectionTitle
}

func (m *MediaSubscription) GetLocationPath() *string {
	if m == nil {
		return nil
	}
	return m.LocationPath
}

func (m *MediaSubscription) GetMediaGrabOperation() []components.MediaGrabOperation {
	if m == nil {
		return nil
	}
	return m.MediaGrabOperation
}

func (m *MediaSubscription) GetPlaylist() map[string]any {
	if m == nil {
		return nil
	}
	return m.Playlist
}

func (m *MediaSubscription) GetSetting() []components.Setting {
	if m == nil {
		return nil
	}
	return m.Setting
}

func (m *MediaSubscription) GetStorageTotal() *int64 {
	if m == nil {
		return nil
	}
	return m.StorageTotal
}

func (m *MediaSubscription) GetTargetLibrarySectionID() *int64 {
	if m == nil {
		return nil
	}
	return m.TargetLibrarySectionID
}

func (m *MediaSubscription) GetTargetSectionLocationID() *int64 {
	if m == nil {
		return nil
	}
	return m.TargetSectionLocationID
}

func (m *MediaSubscription) GetVideo() map[string]any {
	if m == nil {
		return nil
	}
	return m.Video
}

func (m *MediaSubscription) GetParameters() *string {
	if m == nil {
		return nil
	}
	return m.Parameters
}

func (m *MediaSubscription) GetSelected() *bool {
	if m == nil {
		return nil
	}
	return m.Selected
}

type SubscriptionTemplate struct {
	MediaSubscription []MediaSubscription `json:"MediaSubscription,omitempty"`
}

func (s *SubscriptionTemplate) GetMediaSubscription() []MediaSubscription {
	if s == nil {
		return nil
	}
	return s.MediaSubscription
}

// GetTemplateMediaContainer - `MediaContainer` is the root element of most Plex API responses. It serves as a generic container for various types of content (Metadata, Hubs, Directories, etc.) and includes pagination information (offset, size, totalSize) when applicable.
// Common attributes: - identifier: Unique identifier for this container - size: Number of items in this response page - totalSize: Total number of items available (for pagination) - offset: Starting index of this page (for pagination)
// The container often "hoists" common attributes from its children. For example, if all tracks in a container share the same album title, the `parentTitle` attribute may appear on the MediaContainer rather than being repeated on each track.
type GetTemplateMediaContainer struct {
	Identifier *string `json:"identifier,omitempty"`
	// The offset of where this container page starts among the total objects available. Also provided in the `X-Plex-Container-Start` header.
	//
	Offset *int64 `json:"offset,omitempty"`
	Size   *int64 `json:"size,omitempty"`
	// The total size of objects available. Also provided in the `X-Plex-Container-Total-Size` header.
	//
	TotalSize            *int64                 `json:"totalSize,omitempty"`
	SubscriptionTemplate []SubscriptionTemplate `json:"SubscriptionTemplate,omitempty"`
}

func (g *GetTemplateMediaContainer) GetIdentifier() *string {
	if g == nil {
		return nil
	}
	return g.Identifier
}

func (g *GetTemplateMediaContainer) GetOffset() *int64 {
	if g == nil {
		return nil
	}
	return g.Offset
}

func (g *GetTemplateMediaContainer) GetSize() *int64 {
	if g == nil {
		return nil
	}
	return g.Size
}

func (g *GetTemplateMediaContainer) GetTotalSize() *int64 {
	if g == nil {
		return nil
	}
	return g.TotalSize
}

func (g *GetTemplateMediaContainer) GetSubscriptionTemplate() []SubscriptionTemplate {
	if g == nil {
		return nil
	}
	return g.SubscriptionTemplate
}

// GetTemplateResponseBody - OK
type GetTemplateResponseBody struct {
	MediaContainer *GetTemplateMediaContainer `json:"MediaContainer,omitempty"`
}

func (g *GetTemplateResponseBody) GetMediaContainer() *GetTemplateMediaContainer {
	if g == nil {
		return nil
	}
	return g.MediaContainer
}

type GetTemplateResponse struct {
	// HTTP response content type for this operation
	ContentType string
	// HTTP response status code for this operation
	StatusCode int
	// Raw HTTP response; suitable for custom response parsing
	RawResponse *http.Response
	// OK
	Object  *GetTemplateResponseBody
	Headers map[string][]string
}

func (g *GetTemplateResponse) GetContentType() string {
	if g == nil {
		return ""
	}
	return g.ContentType
}

func (g *GetTemplateResponse) GetStatusCode() int {
	if g == nil {
		return 0
	}
	return g.StatusCode
}

func (g *GetTemplateResponse) GetRawResponse() *http.Response {
	if g == nil {
		return nil
	}
	return g.RawResponse
}

func (g *GetTemplateResponse) GetObject() *GetTemplateResponseBody {
	if g == nil {
		return nil
	}
	return g.Object
}

func (g *GetTemplateResponse) GetHeaders() map[string][]string {
	if g == nil {
		return map[string][]string{}
	}
	return g.Headers
}
