package obsws

// This file is automatically generated.
// https://github.com/christopher-dG/go-obs-websocket/blob/master/codegen/protocol.py

// SourceCreatedEvent : A source has been created
// A source can be an input, a scene or a transition.
//
// Since obs-websocket version: 4.6.0.
//
// https://github.com/Palakis/obs-websocket/blob/4.x-current/docs/generated/protocol.md#sourcecreated
type SourceCreatedEvent struct {
	// Source name.
	// Required: Yes.
	SourceName string `json:"sourceName"`
	// Source type.
	// Can be "input", "scene", "transition" or "filter".
	// Required: Yes.
	SourceType string `json:"sourceType"`
	// Source kind.
	// Required: Yes.
	SourceKind string `json:"sourceKind"`
	// Source settings.
	// Required: Yes.
	SourceSettings map[string]interface{} `json:"sourceSettings"`
	_event         `json:",squash"`
}

// SourceDestroyedEvent : A source has been destroyed/removed
// A source can be an input, a scene or a transition.
//
// Since obs-websocket version: 4.6.0.
//
// https://github.com/Palakis/obs-websocket/blob/4.x-current/docs/generated/protocol.md#sourcedestroyed
type SourceDestroyedEvent struct {
	// Source name.
	// Required: Yes.
	SourceName string `json:"sourceName"`
	// Source type.
	// Can be "input", "scene", "transition" or "filter".
	// Required: Yes.
	SourceType string `json:"sourceType"`
	// Source kind.
	// Required: Yes.
	SourceKind string `json:"sourceKind"`
	_event     `json:",squash"`
}

// SourceVolumeChangedEvent : The volume of a source has changed.
//
// Since obs-websocket version: 4.6.0.
//
// https://github.com/Palakis/obs-websocket/blob/4.x-current/docs/generated/protocol.md#sourcevolumechanged
type SourceVolumeChangedEvent struct {
	// Source name.
	// Required: Yes.
	SourceName string `json:"sourceName"`
	// Source volume.
	// Required: Yes.
	Volume float64 `json:"volume"`
	_event `json:",squash"`
}

// SourceMuteStateChangedEvent : A source has been muted or unmuted.
//
// Since obs-websocket version: 4.6.0.
//
// https://github.com/Palakis/obs-websocket/blob/4.x-current/docs/generated/protocol.md#sourcemutestatechanged
type SourceMuteStateChangedEvent struct {
	// Source name.
	// Required: Yes.
	SourceName string `json:"sourceName"`
	// Mute status of the source.
	// Required: Yes.
	Muted  bool `json:"muted"`
	_event `json:",squash"`
}

// SourceAudioSyncOffsetChangedEvent : The audio sync offset of a source has changed.
//
// Since obs-websocket version: 4.6.0.
//
// https://github.com/Palakis/obs-websocket/blob/4.x-current/docs/generated/protocol.md#sourceaudiosyncoffsetchanged
type SourceAudioSyncOffsetChangedEvent struct {
	// Source name.
	// Required: Yes.
	SourceName string `json:"sourceName"`
	// Audio sync offset of the source (in nanoseconds).
	// Required: Yes.
	SyncOffset int `json:"syncOffset"`
	_event     `json:",squash"`
}

// SourceAudioMixersChangedEvent : Audio mixer routing changed on a source.
//
// Since obs-websocket version: 4.6.0.
//
// https://github.com/Palakis/obs-websocket/blob/4.x-current/docs/generated/protocol.md#sourceaudiomixerschanged
type SourceAudioMixersChangedEvent struct {
	// Source name.
	// Required: Yes.
	SourceName string `json:"sourceName"`
	// Routing status of the source for each audio mixer (array of 6 values).
	// Required: Yes.
	Mixers []map[string]interface{} `json:"mixers"`
	// Mixer number.
	// Required: Yes.
	MixersID int `json:"mixers.*.id"`
	// Routing status.
	// Required: Yes.
	MixersEnabled bool `json:"mixers.*.enabled"`
	// Raw mixer flags (little-endian, one bit per mixer) as an hexadecimal value.
	// Required: Yes.
	HexMixersValue string `json:"hexMixersValue"`
	_event         `json:",squash"`
}

// SourceRenamedEvent : A source has been renamed.
//
// Since obs-websocket version: 4.6.0.
//
// https://github.com/Palakis/obs-websocket/blob/4.x-current/docs/generated/protocol.md#sourcerenamed
type SourceRenamedEvent struct {
	// Previous source name.
	// Required: Yes.
	PreviousName string `json:"previousName"`
	// New source name.
	// Required: Yes.
	NewName string `json:"newName"`
	_event  `json:",squash"`
}

// SourceFilterAddedEvent : A filter was added to a source.
//
// Since obs-websocket version: 4.6.0.
//
// https://github.com/Palakis/obs-websocket/blob/4.x-current/docs/generated/protocol.md#sourcefilteradded
type SourceFilterAddedEvent struct {
	// Source name.
	// Required: Yes.
	SourceName string `json:"sourceName"`
	// Filter name.
	// Required: Yes.
	FilterName string `json:"filterName"`
	// Filter type.
	// Required: Yes.
	FilterType string `json:"filterType"`
	// Filter settings.
	// Required: Yes.
	FilterSettings map[string]interface{} `json:"filterSettings"`
	_event         `json:",squash"`
}

// SourceFilterRemovedEvent : A filter was removed from a source.
//
// Since obs-websocket version: 4.6.0.
//
// https://github.com/Palakis/obs-websocket/blob/4.x-current/docs/generated/protocol.md#sourcefilterremoved
type SourceFilterRemovedEvent struct {
	// Source name.
	// Required: Yes.
	SourceName string `json:"sourceName"`
	// Filter name.
	// Required: Yes.
	FilterName string `json:"filterName"`
	// Filter type.
	// Required: Yes.
	FilterType string `json:"filterType"`
	_event     `json:",squash"`
}

// SourceFilterVisibilityChangedEvent : The visibility/enabled state of a filter changed.
//
// Since obs-websocket version: 4.7.0.
//
// https://github.com/Palakis/obs-websocket/blob/4.x-current/docs/generated/protocol.md#sourcefiltervisibilitychanged
type SourceFilterVisibilityChangedEvent struct {
	// Source name.
	// Required: Yes.
	SourceName string `json:"sourceName"`
	// Filter name.
	// Required: Yes.
	FilterName string `json:"filterName"`
	// New filter state.
	// Required: Yes.
	FilterEnabled bool `json:"filterEnabled"`
	_event        `json:",squash"`
}

// SourceFiltersReorderedEvent : Filters in a source have been reordered.
//
// Since obs-websocket version: 4.6.0.
//
// https://github.com/Palakis/obs-websocket/blob/4.x-current/docs/generated/protocol.md#sourcefiltersreordered
type SourceFiltersReorderedEvent struct {
	// Source name.
	// Required: Yes.
	SourceName string `json:"sourceName"`
	// Ordered Filters list.
	// Required: Yes.
	Filters []map[string]interface{} `json:"filters"`
	// Filter name.
	// Required: Yes.
	FiltersName string `json:"filters.*.name"`
	// Filter type.
	// Required: Yes.
	FiltersType string `json:"filters.*.type"`
	_event      `json:",squash"`
}

// SourceOrderChangedEvent : Scene items have been reordered.
//
// Since obs-websocket version: 4.0.0.
//
// https://github.com/Palakis/obs-websocket/blob/4.x-current/docs/generated/protocol.md#sourceorderchanged
type SourceOrderChangedEvent struct {
	// Name of the scene where items have been reordered.
	// Required: Yes.
	SceneName string `json:"scene-name"`
	// Ordered list of scene items.
	// Required: Yes.
	SceneItems []map[string]interface{} `json:"scene-items"`
	// Item source name.
	// Required: Yes.
	SceneItemsSourceName string `json:"scene-items.*.source-name"`
	// Scene item unique ID.
	// Required: Yes.
	SceneItemsItemID int `json:"scene-items.*.item-id"`
	_event           `json:",squash"`
}

// SceneItemAddedEvent : An item has been added to the current scene.
//
// Since obs-websocket version: 4.0.0.
//
// https://github.com/Palakis/obs-websocket/blob/4.x-current/docs/generated/protocol.md#sceneitemadded
type SceneItemAddedEvent struct {
	// Name of the scene.
	// Required: Yes.
	SceneName string `json:"scene-name"`
	// Name of the item added to the scene.
	// Required: Yes.
	ItemName string `json:"item-name"`
	// Scene item ID.
	// Required: Yes.
	ItemID int `json:"item-id"`
	_event `json:",squash"`
}

// SceneItemRemovedEvent : An item has been removed from the current scene.
//
// Since obs-websocket version: 4.0.0.
//
// https://github.com/Palakis/obs-websocket/blob/4.x-current/docs/generated/protocol.md#sceneitemremoved
type SceneItemRemovedEvent struct {
	// Name of the scene.
	// Required: Yes.
	SceneName string `json:"scene-name"`
	// Name of the item removed from the scene.
	// Required: Yes.
	ItemName string `json:"item-name"`
	// Scene item ID.
	// Required: Yes.
	ItemID int `json:"item-id"`
	_event `json:",squash"`
}

// SceneItemVisibilityChangedEvent : An item's visibility has been toggled.
//
// Since obs-websocket version: 4.0.0.
//
// https://github.com/Palakis/obs-websocket/blob/4.x-current/docs/generated/protocol.md#sceneitemvisibilitychanged
type SceneItemVisibilityChangedEvent struct {
	// Name of the scene.
	// Required: Yes.
	SceneName string `json:"scene-name"`
	// Name of the item in the scene.
	// Required: Yes.
	ItemName string `json:"item-name"`
	// Scene item ID.
	// Required: Yes.
	ItemID int `json:"item-id"`
	// New visibility state of the item.
	// Required: Yes.
	ItemVisible bool `json:"item-visible"`
	_event      `json:",squash"`
}

// SceneItemTransformChangedEvent : An item's transform has been changed.
//
// Since obs-websocket version: 4.6.0.
//
// https://github.com/Palakis/obs-websocket/blob/4.x-current/docs/generated/protocol.md#sceneitemtransformchanged
type SceneItemTransformChangedEvent struct {
	// Name of the scene.
	// Required: Yes.
	SceneName string `json:"scene-name"`
	// Name of the item in the scene.
	// Required: Yes.
	ItemName string `json:"item-name"`
	// Scene item ID.
	// Required: Yes.
	ItemID int `json:"item-id"`
	// Scene item transform properties.
	// Required: Yes.
	Transform *SceneItemTransform `json:"transform"`
	_event    `json:",squash"`
}

// SceneItemSelectedEvent : A scene item is selected.
//
// Since obs-websocket version: 4.6.0.
//
// https://github.com/Palakis/obs-websocket/blob/4.x-current/docs/generated/protocol.md#sceneitemselected
type SceneItemSelectedEvent struct {
	// Name of the scene.
	// Required: Yes.
	SceneName string `json:"scene-name"`
	// Name of the item in the scene.
	// Required: Yes.
	ItemName string `json:"item-name"`
	// Name of the item in the scene.
	// Required: Yes.
	ItemID int `json:"item-id"`
	_event `json:",squash"`
}

// SceneItemDeselectedEvent : A scene item is deselected.
//
// Since obs-websocket version: 4.6.0.
//
// https://github.com/Palakis/obs-websocket/blob/4.x-current/docs/generated/protocol.md#sceneitemdeselected
type SceneItemDeselectedEvent struct {
	// Name of the scene.
	// Required: Yes.
	SceneName string `json:"scene-name"`
	// Name of the item in the scene.
	// Required: Yes.
	ItemName string `json:"item-name"`
	// Name of the item in the scene.
	// Required: Yes.
	ItemID int `json:"item-id"`
	_event `json:",squash"`
}
