@tool
extends TwitchData

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

## 
## #/components/schemas/HypeTrainEvent
class_name TwitchHypeTrainEvent
	
## An ID that identifies this event.
@export var id: String:
	set(val): 
		id = val
		track_data(&"id", val)

## The type of event. The string is in the form, hypetrain.{event\_name}. The request returns only progress event types (i.e., hypetrain.progression).
@export var event_type: String:
	set(val): 
		event_type = val
		track_data(&"event_type", val)

## The UTC date and time (in RFC3339 format) that the event occurred.
@export var event_timestamp: String:
	set(val): 
		event_timestamp = val
		track_data(&"event_timestamp", val)

## The version number of the definition of the event’s data. For example, the value is 1 if the data in `event_data` uses the first definition of the event’s data.
@export var version: String:
	set(val): 
		version = val
		track_data(&"version", val)

## The event’s data.
@export var event_data: EventData:
	set(val): 
		event_data = val
		track_data(&"event_data", val)
var response: BufferedHTTPClient.ResponseData


## Constructor with all required fields.
static func create(_id: String, _event_type: String, _event_timestamp: String, _version: String, _event_data: EventData) -> TwitchHypeTrainEvent:
	var twitch_hype_train_event: TwitchHypeTrainEvent = TwitchHypeTrainEvent.new()
	twitch_hype_train_event.id = _id
	twitch_hype_train_event.event_type = _event_type
	twitch_hype_train_event.event_timestamp = _event_timestamp
	twitch_hype_train_event.version = _version
	twitch_hype_train_event.event_data = _event_data
	return twitch_hype_train_event


static func from_json(d: Dictionary) -> TwitchHypeTrainEvent:
	var result: TwitchHypeTrainEvent = TwitchHypeTrainEvent.new()
	if d.get("id", null) != null:
		result.id = d["id"]
	if d.get("event_type", null) != null:
		result.event_type = d["event_type"]
	if d.get("event_timestamp", null) != null:
		result.event_timestamp = d["event_timestamp"]
	if d.get("version", null) != null:
		result.version = d["version"]
	if d.get("event_data", null) != null:
		result.event_data = EventData.from_json(d["event_data"])
	return result



## The event’s data.
## #/components/schemas/HypeTrainEvent/EventData
class EventData extends TwitchData:

	## The ID of the broadcaster that’s running the Hype Train.
	@export var broadcaster_id: String:
		set(val): 
			broadcaster_id = val
			track_data(&"broadcaster_id", val)
	
	## The UTC date and time (in RFC3339 format) that another Hype Train can start.
	@export var cooldown_end_time: String:
		set(val): 
			cooldown_end_time = val
			track_data(&"cooldown_end_time", val)
	
	## The UTC date and time (in RFC3339 format) that the Hype Train ends.
	@export var expires_at: String:
		set(val): 
			expires_at = val
			track_data(&"expires_at", val)
	
	## The value needed to reach the next level.
	@export var goal: int:
		set(val): 
			goal = val
			track_data(&"goal", val)
	
	## An ID that identifies this Hype Train.
	@export var id: String:
		set(val): 
			id = val
			track_data(&"id", val)
	
	## The most recent contribution towards the Hype Train’s goal.
	@export var last_contribution: LastContribution:
		set(val): 
			last_contribution = val
			track_data(&"last_contribution", val)
	
	## The highest level that the Hype Train reached (the levels are 1 through 5).
	@export var level: int:
		set(val): 
			level = val
			track_data(&"level", val)
	
	## The UTC date and time (in RFC3339 format) that this Hype Train started.
	@export var started_at: String:
		set(val): 
			started_at = val
			track_data(&"started_at", val)
	
	## The top contributors for each contribution type. For example, the top contributor using BITS (by aggregate) and the top contributor using SUBS (by count).
	@export var top_contributions: Array[TopContributions]:
		set(val): 
			top_contributions = val
			track_data(&"top_contributions", val)
	
	## The current total amount raised.
	@export var total: int:
		set(val): 
			total = val
			track_data(&"total", val)
	
	
	
	## Constructor with all required fields.
	static func create(_broadcaster_id: String, _cooldown_end_time: String, _expires_at: String, _goal: int, _id: String, _last_contribution: LastContribution, _level: int, _started_at: String, _top_contributions: Array[TopContributions], _total: int) -> EventData:
		var event_data: EventData = EventData.new()
		event_data.broadcaster_id = _broadcaster_id
		event_data.cooldown_end_time = _cooldown_end_time
		event_data.expires_at = _expires_at
		event_data.goal = _goal
		event_data.id = _id
		event_data.last_contribution = _last_contribution
		event_data.level = _level
		event_data.started_at = _started_at
		event_data.top_contributions = _top_contributions
		event_data.total = _total
		return event_data
	
	
	static func from_json(d: Dictionary) -> EventData:
		var result: EventData = EventData.new()
		if d.get("broadcaster_id", null) != null:
			result.broadcaster_id = d["broadcaster_id"]
		if d.get("cooldown_end_time", null) != null:
			result.cooldown_end_time = d["cooldown_end_time"]
		if d.get("expires_at", null) != null:
			result.expires_at = d["expires_at"]
		if d.get("goal", null) != null:
			result.goal = d["goal"]
		if d.get("id", null) != null:
			result.id = d["id"]
		if d.get("last_contribution", null) != null:
			result.last_contribution = LastContribution.from_json(d["last_contribution"])
		if d.get("level", null) != null:
			result.level = d["level"]
		if d.get("started_at", null) != null:
			result.started_at = d["started_at"]
		if d.get("top_contributions", null) != null:
			for value in d["top_contributions"]:
				result.top_contributions.append(TopContributions.from_json(value))
		if d.get("total", null) != null:
			result.total = d["total"]
		return result
	


## The most recent contribution towards the Hype Train’s goal.
## #/components/schemas/HypeTrainEvent/EventData/LastContribution
class LastContribution extends TwitchData:

	## The total amount contributed. If `type` is BITS, `total` represents the amount of Bits used. If `type` is SUBS, `total` is 500, 1000, or 2500 to represent tier 1, 2, or 3 subscriptions, respectively.
	@export var total: int:
		set(val): 
			total = val
			track_data(&"total", val)
	
	## The contribution method used. Possible values are:  
	##   
	## * BITS — Cheering with Bits.
	## * SUBS — Subscription activity like subscribing or gifting subscriptions.
	## * OTHER — Covers other contribution methods not listed.
	@export var type: String:
		set(val): 
			type = val
			track_data(&"type", val)
	
	## The ID of the user that made the contribution.
	@export var user: String:
		set(val): 
			user = val
			track_data(&"user", val)
	
	
	
	## Constructor with all required fields.
	static func create(_total: int, _type: String, _user: String) -> LastContribution:
		var last_contribution: LastContribution = LastContribution.new()
		last_contribution.total = _total
		last_contribution.type = _type
		last_contribution.user = _user
		return last_contribution
	
	
	static func from_json(d: Dictionary) -> LastContribution:
		var result: LastContribution = LastContribution.new()
		if d.get("total", null) != null:
			result.total = d["total"]
		if d.get("type", null) != null:
			result.type = d["type"]
		if d.get("user", null) != null:
			result.user = d["user"]
		return result
	


## The top contributors for each contribution type. For example, the top contributor using BITS (by aggregate) and the top contributor using SUBS (by count).
## #/components/schemas/HypeTrainEvent/EventData/TopContributions
class TopContributions extends TwitchData:

	## The total amount contributed. If `type` is BITS, `total` represents the amount of Bits used. If `type` is SUBS, `total` is 500, 1000, or 2500 to represent tier 1, 2, or 3 subscriptions, respectively.
	@export var total: int:
		set(val): 
			total = val
			track_data(&"total", val)
	
	## The contribution method used. Possible values are:  
	##   
	## * BITS — Cheering with Bits.
	## * SUBS — Subscription activity like subscribing or gifting subscriptions.
	## * OTHER — Covers other contribution methods not listed.
	@export var type: String:
		set(val): 
			type = val
			track_data(&"type", val)
	
	## The ID of the user that made the contribution.
	@export var user: String:
		set(val): 
			user = val
			track_data(&"user", val)
	
	
	
	## Constructor with all required fields.
	static func create(_total: int, _type: String, _user: String) -> TopContributions:
		var top_contributions: TopContributions = TopContributions.new()
		top_contributions.total = _total
		top_contributions.type = _type
		top_contributions.user = _user
		return top_contributions
	
	
	static func from_json(d: Dictionary) -> TopContributions:
		var result: TopContributions = TopContributions.new()
		if d.get("total", null) != null:
			result.total = d["total"]
		if d.get("type", null) != null:
			result.type = d["type"]
		if d.get("user", null) != null:
			result.user = d["user"]
		return result
	