@tool
extends TwitchData

# CLASS GOT AUTOGENERATED DON'T CHANGE MANUALLY. CHANGES CAN BE OVERWRITTEN EASILY.

class_name TwitchGetHypeTrainStatus
	


## 
## #/components/schemas/GetHypeTrainStatusResponse
class Response extends TwitchData:

	## A list that contains information related to the channel’s Hype Train.
	@export var data: Array[ResponseData]:
		set(val): 
			data = val
			track_data(&"data", val)
	
	## An object with information about the channel’s Hype Train records. Null if a Hype Train has not occurred.
	@export var all_time_high: ResponseAllTimeHigh:
		set(val): 
			all_time_high = val
			track_data(&"all_time_high", val)
	
	## An object with information about the channel’s shared Hype Train records. Null if a Hype Train has not occurred.
	@export var shared_all_time_high: ResponseSharedAllTimeHigh:
		set(val): 
			shared_all_time_high = val
			track_data(&"shared_all_time_high", val)
	var response: BufferedHTTPClient.ResponseData
	
	
	## Constructor with all required fields.
	static func create(_data: Array[ResponseData], _all_time_high: ResponseAllTimeHigh, _shared_all_time_high: ResponseSharedAllTimeHigh) -> Response:
		var response: Response = Response.new()
		response.data = _data
		response.all_time_high = _all_time_high
		response.shared_all_time_high = _shared_all_time_high
		return response
	
	
	static func from_json(d: Dictionary) -> Response:
		var result: Response = Response.new()
		if d.get("data", null) != null:
			for value in d["data"]:
				result.data.append(ResponseData.from_json(value))
		if d.get("all_time_high", null) != null:
			result.all_time_high = ResponseAllTimeHigh.from_json(d["all_time_high"])
		if d.get("shared_all_time_high", null) != null:
			result.shared_all_time_high = ResponseSharedAllTimeHigh.from_json(d["shared_all_time_high"])
		return result
	


## A list that contains information related to the channel’s Hype Train.
## #/components/schemas/GetHypeTrainStatusResponse/Data
class ResponseData extends TwitchData:

	## An object describing the current Hype Train. Null if a Hype Train is not active.
	@export var current: ResponseCurrent:
		set(val): 
			current = val
			track_data(&"current", val)
	
	
	
	## Constructor with all required fields.
	static func create(_current: ResponseCurrent) -> ResponseData:
		var response_data: ResponseData = ResponseData.new()
		response_data.current = _current
		return response_data
	
	
	static func from_json(d: Dictionary) -> ResponseData:
		var result: ResponseData = ResponseData.new()
		if d.get("current", null) != null:
			result.current = ResponseCurrent.from_json(d["current"])
		return result
	


## An object describing the current Hype Train. Null if a Hype Train is not active.
## #/components/schemas/GetHypeTrainStatusResponse/Data/Current
class ResponseCurrent extends TwitchData:

	## The Hype Train ID.
	@export var id: String:
		set(val): 
			id = val
			track_data(&"id", val)
	
	## The broadcaster ID.
	@export var broadcaster_user_id: String:
		set(val): 
			broadcaster_user_id = val
			track_data(&"broadcaster_user_id", val)
	
	## The broadcaster login.
	@export var broadcaster_user_login: String:
		set(val): 
			broadcaster_user_login = val
			track_data(&"broadcaster_user_login", val)
	
	## The broadcaster display name.
	@export var broadcaster_user_name: String:
		set(val): 
			broadcaster_user_name = val
			track_data(&"broadcaster_user_name", val)
	
	## The current level of the Hype Train.
	@export var level: int:
		set(val): 
			level = val
			track_data(&"level", val)
	
	## Total points contributed to the Hype Train.
	@export var total: int:
		set(val): 
			total = val
			track_data(&"total", val)
	
	## The number of points contributed to the Hype Train at the current level.
	@export var progress: int:
		set(val): 
			progress = val
			track_data(&"progress", val)
	
	## The number of points required to reach the next level.
	@export var goal: int:
		set(val): 
			goal = val
			track_data(&"goal", val)
	
	## The contributors with the most points contributed.
	@export var top_contributions: Array[ResponseTopContributions]:
		set(val): 
			top_contributions = val
			track_data(&"top_contributions", val)
	
	
	
	## Constructor with all required fields.
	static func create(_id: String, _broadcaster_user_id: String, _broadcaster_user_login: String, _broadcaster_user_name: String, _level: int, _total: int, _progress: int, _goal: int, _top_contributions: Array[ResponseTopContributions]) -> ResponseCurrent:
		var response_current: ResponseCurrent = ResponseCurrent.new()
		response_current.id = _id
		response_current.broadcaster_user_id = _broadcaster_user_id
		response_current.broadcaster_user_login = _broadcaster_user_login
		response_current.broadcaster_user_name = _broadcaster_user_name
		response_current.level = _level
		response_current.total = _total
		response_current.progress = _progress
		response_current.goal = _goal
		response_current.top_contributions = _top_contributions
		return response_current
	
	
	static func from_json(d: Dictionary) -> ResponseCurrent:
		var result: ResponseCurrent = ResponseCurrent.new()
		if d.get("id", null) != null:
			result.id = d["id"]
		if d.get("broadcaster_user_id", null) != null:
			result.broadcaster_user_id = d["broadcaster_user_id"]
		if d.get("broadcaster_user_login", null) != null:
			result.broadcaster_user_login = d["broadcaster_user_login"]
		if d.get("broadcaster_user_name", null) != null:
			result.broadcaster_user_name = d["broadcaster_user_name"]
		if d.get("level", null) != null:
			result.level = d["level"]
		if d.get("total", null) != null:
			result.total = d["total"]
		if d.get("progress", null) != null:
			result.progress = d["progress"]
		if d.get("goal", null) != null:
			result.goal = d["goal"]
		if d.get("top_contributions", null) != null:
			for value in d["top_contributions"]:
				result.top_contributions.append(ResponseTopContributions.from_json(value))
		return result
	


## The contributors with the most points contributed.
## #/components/schemas/GetHypeTrainStatusResponse/Data/Current/TopContributions
class ResponseTopContributions extends TwitchData:

	## The ID of the user that made the contribution.
	@export var user_id: String:
		set(val): 
			user_id = val
			track_data(&"user_id", val)
	
	## The user’s login name.
	@export var user_login: String:
		set(val): 
			user_login = val
			track_data(&"user_login", val)
	
	## The user’s display name.
	@export var user_name: String:
		set(val): 
			user_name = val
			track_data(&"user_name", val)
	
	## The type of the Hype Train. Possible values are:   
	##   
	## * **treasure**
	## * **golden\_kappa**
	## * **regular**
	##   
	## [Learn More](https://help.twitch.tv/s/article/hype-train-guide#special)
	@export var type: String:
		set(val): 
			type = val
			track_data(&"type", val)
	
	## The total number of points contributed for the type.
	@export var total: int:
		set(val): 
			total = val
			track_data(&"total", val)
	
	## A list containing the broadcasters participating in the shared Hype Train. Null if the Hype Train is not shared.
	@export var shared_train_participants: Array[ResponseSharedTrainParticipants]:
		set(val): 
			shared_train_participants = val
			track_data(&"shared_train_participants", val)
	
	## The time when the Hype Train started.
	@export var started_at: String:
		set(val): 
			started_at = val
			track_data(&"started_at", val)
	
	## The time when the Hype Train expires. The expiration is extended when the Hype Train reaches a new level.
	@export var expires_at: String:
		set(val): 
			expires_at = val
			track_data(&"expires_at", val)
	
	## Indicates if the Hype Train is shared. When true, shared\_train\_participants will contain the list of broadcasters the train is shared with.
	@export var is_shared_train: bool:
		set(val): 
			is_shared_train = val
			track_data(&"is_shared_train", val)
	
	
	
	## Constructor with all required fields.
	static func create(_user_id: String, _user_login: String, _user_name: String, _type: String, _total: int, _shared_train_participants: Array[ResponseSharedTrainParticipants], _started_at: String, _expires_at: String, _is_shared_train: bool) -> ResponseTopContributions:
		var response_top_contributions: ResponseTopContributions = ResponseTopContributions.new()
		response_top_contributions.user_id = _user_id
		response_top_contributions.user_login = _user_login
		response_top_contributions.user_name = _user_name
		response_top_contributions.type = _type
		response_top_contributions.total = _total
		response_top_contributions.shared_train_participants = _shared_train_participants
		response_top_contributions.started_at = _started_at
		response_top_contributions.expires_at = _expires_at
		response_top_contributions.is_shared_train = _is_shared_train
		return response_top_contributions
	
	
	static func from_json(d: Dictionary) -> ResponseTopContributions:
		var result: ResponseTopContributions = ResponseTopContributions.new()
		if d.get("user_id", null) != null:
			result.user_id = d["user_id"]
		if d.get("user_login", null) != null:
			result.user_login = d["user_login"]
		if d.get("user_name", null) != null:
			result.user_name = d["user_name"]
		if d.get("type", null) != null:
			result.type = d["type"]
		if d.get("total", null) != null:
			result.total = d["total"]
		if d.get("shared_train_participants", null) != null:
			for value in d["shared_train_participants"]:
				result.shared_train_participants.append(ResponseSharedTrainParticipants.from_json(value))
		if d.get("started_at", null) != null:
			result.started_at = d["started_at"]
		if d.get("expires_at", null) != null:
			result.expires_at = d["expires_at"]
		if d.get("is_shared_train", null) != null:
			result.is_shared_train = d["is_shared_train"]
		return result
	


## A list containing the broadcasters participating in the shared Hype Train. Null if the Hype Train is not shared.
## #/components/schemas/GetHypeTrainStatusResponse/Data/Current/TopContributions/SharedTrainParticipants
class ResponseSharedTrainParticipants extends TwitchData:

	## The broadcaster ID.
	@export var broadcaster_user_id: String:
		set(val): 
			broadcaster_user_id = val
			track_data(&"broadcaster_user_id", val)
	
	## The broadcaster login.
	@export var broadcaster_user_login: String:
		set(val): 
			broadcaster_user_login = val
			track_data(&"broadcaster_user_login", val)
	
	## The broadcaster display name.
	@export var broadcaster_user_name: String:
		set(val): 
			broadcaster_user_name = val
			track_data(&"broadcaster_user_name", val)
	
	
	
	## Constructor with all required fields.
	static func create(_broadcaster_user_id: String, _broadcaster_user_login: String, _broadcaster_user_name: String) -> ResponseSharedTrainParticipants:
		var response_shared_train_participants: ResponseSharedTrainParticipants = ResponseSharedTrainParticipants.new()
		response_shared_train_participants.broadcaster_user_id = _broadcaster_user_id
		response_shared_train_participants.broadcaster_user_login = _broadcaster_user_login
		response_shared_train_participants.broadcaster_user_name = _broadcaster_user_name
		return response_shared_train_participants
	
	
	static func from_json(d: Dictionary) -> ResponseSharedTrainParticipants:
		var result: ResponseSharedTrainParticipants = ResponseSharedTrainParticipants.new()
		if d.get("broadcaster_user_id", null) != null:
			result.broadcaster_user_id = d["broadcaster_user_id"]
		if d.get("broadcaster_user_login", null) != null:
			result.broadcaster_user_login = d["broadcaster_user_login"]
		if d.get("broadcaster_user_name", null) != null:
			result.broadcaster_user_name = d["broadcaster_user_name"]
		return result
	


## An object with information about the channel’s Hype Train records. Null if a Hype Train has not occurred.
## #/components/schemas/GetHypeTrainStatusResponse/AllTimeHigh
class ResponseAllTimeHigh extends TwitchData:

	## The level of the record Hype Train.
	@export var level: int:
		set(val): 
			level = val
			track_data(&"level", val)
	
	## Total points contributed to the record Hype Train.
	@export var total: int:
		set(val): 
			total = val
			track_data(&"total", val)
	
	## The time when the record was achieved.
	@export var achieved_at: String:
		set(val): 
			achieved_at = val
			track_data(&"achieved_at", val)
	
	
	
	## Constructor with all required fields.
	static func create(_level: int, _total: int, _achieved_at: String) -> ResponseAllTimeHigh:
		var response_all_time_high: ResponseAllTimeHigh = ResponseAllTimeHigh.new()
		response_all_time_high.level = _level
		response_all_time_high.total = _total
		response_all_time_high.achieved_at = _achieved_at
		return response_all_time_high
	
	
	static func from_json(d: Dictionary) -> ResponseAllTimeHigh:
		var result: ResponseAllTimeHigh = ResponseAllTimeHigh.new()
		if d.get("level", null) != null:
			result.level = d["level"]
		if d.get("total", null) != null:
			result.total = d["total"]
		if d.get("achieved_at", null) != null:
			result.achieved_at = d["achieved_at"]
		return result
	


## An object with information about the channel’s shared Hype Train records. Null if a Hype Train has not occurred.
## #/components/schemas/GetHypeTrainStatusResponse/SharedAllTimeHigh
class ResponseSharedAllTimeHigh extends TwitchData:

	## The level of the record Hype Train.
	@export var level: int:
		set(val): 
			level = val
			track_data(&"level", val)
	
	## Total points contributed to the record Hype Train.
	@export var total: int:
		set(val): 
			total = val
			track_data(&"total", val)
	
	## The time when the record was achieved.
	@export var achieved_at: String:
		set(val): 
			achieved_at = val
			track_data(&"achieved_at", val)
	
	
	
	## Constructor with all required fields.
	static func create(_level: int, _total: int, _achieved_at: String) -> ResponseSharedAllTimeHigh:
		var response_shared_all_time_high: ResponseSharedAllTimeHigh = ResponseSharedAllTimeHigh.new()
		response_shared_all_time_high.level = _level
		response_shared_all_time_high.total = _total
		response_shared_all_time_high.achieved_at = _achieved_at
		return response_shared_all_time_high
	
	
	static func from_json(d: Dictionary) -> ResponseSharedAllTimeHigh:
		var result: ResponseSharedAllTimeHigh = ResponseSharedAllTimeHigh.new()
		if d.get("level", null) != null:
			result.level = d["level"]
		if d.get("total", null) != null:
			result.total = d["total"]
		if d.get("achieved_at", null) != null:
			result.achieved_at = d["achieved_at"]
		return result
	