@tool
extends TwitchData

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

## 
## #/components/schemas/Poll
class_name TwitchPoll
	
## An ID that identifies the poll.
@export var id: String:
	set(val): 
		id = val
		track_data(&"id", val)

## An ID that identifies the broadcaster that created the poll.
@export var broadcaster_id: String:
	set(val): 
		broadcaster_id = val
		track_data(&"broadcaster_id", val)

## The broadcaster’s display name.
@export var broadcaster_name: String:
	set(val): 
		broadcaster_name = val
		track_data(&"broadcaster_name", val)

## The broadcaster’s login name.
@export var broadcaster_login: String:
	set(val): 
		broadcaster_login = val
		track_data(&"broadcaster_login", val)

## The question that viewers are voting on. For example, _What game should I play next?_ The title may contain a maximum of 60 characters.
@export var title: String:
	set(val): 
		title = val
		track_data(&"title", val)

## A list of choices that viewers can choose from. The list will contain a minimum of two choices and up to a maximum of five choices.
@export var choices: Array[Choices]:
	set(val): 
		choices = val
		track_data(&"choices", val)

## Not used; will be set to **false**.
@export var bits_voting_enabled: bool:
	set(val): 
		bits_voting_enabled = val
		track_data(&"bits_voting_enabled", val)

## Not used; will be set to 0.
@export var bits_per_vote: int:
	set(val): 
		bits_per_vote = val
		track_data(&"bits_per_vote", val)

## A Boolean value that indicates whether viewers may cast additional votes using Channel Points. For information about Channel Points, see [Channel Points Guide](https://help.twitch.tv/s/article/channel-points-guide).
@export var channel_points_voting_enabled: bool:
	set(val): 
		channel_points_voting_enabled = val
		track_data(&"channel_points_voting_enabled", val)

## The number of points the viewer must spend to cast one additional vote.
@export var channel_points_per_vote: int:
	set(val): 
		channel_points_per_vote = val
		track_data(&"channel_points_per_vote", val)

## The poll’s status. Valid values are:  
##   
## * ACTIVE — The poll is running.
## * COMPLETED — The poll ended on schedule (see the `duration` field).
## * TERMINATED — The poll was terminated before its scheduled end.
## * ARCHIVED — The poll has been archived and is no longer visible on the channel.
## * MODERATED — The poll was deleted.
## * INVALID — Something went wrong while determining the state.
@export var status: String:
	set(val): 
		status = val
		track_data(&"status", val)

## The length of time (in seconds) that the poll will run for.
@export var duration: int:
	set(val): 
		duration = val
		track_data(&"duration", val)

## The UTC date and time (in RFC3339 format) of when the poll began.
@export var started_at: String:
	set(val): 
		started_at = val
		track_data(&"started_at", val)

## The UTC date and time (in RFC3339 format) of when the poll ended. If `status` is ACTIVE, this field is set to **null**.
@export var ended_at: String:
	set(val): 
		ended_at = val
		track_data(&"ended_at", val)
var response: BufferedHTTPClient.ResponseData


## Constructor with all required fields.
static func create(_id: String, _broadcaster_id: String, _broadcaster_name: String, _broadcaster_login: String, _title: String, _choices: Array[Choices], _bits_voting_enabled: bool, _bits_per_vote: int, _channel_points_voting_enabled: bool, _channel_points_per_vote: int, _status: String, _duration: int, _started_at: String, _ended_at: String) -> TwitchPoll:
	var twitch_poll: TwitchPoll = TwitchPoll.new()
	twitch_poll.id = _id
	twitch_poll.broadcaster_id = _broadcaster_id
	twitch_poll.broadcaster_name = _broadcaster_name
	twitch_poll.broadcaster_login = _broadcaster_login
	twitch_poll.title = _title
	twitch_poll.choices = _choices
	twitch_poll.bits_voting_enabled = _bits_voting_enabled
	twitch_poll.bits_per_vote = _bits_per_vote
	twitch_poll.channel_points_voting_enabled = _channel_points_voting_enabled
	twitch_poll.channel_points_per_vote = _channel_points_per_vote
	twitch_poll.status = _status
	twitch_poll.duration = _duration
	twitch_poll.started_at = _started_at
	twitch_poll.ended_at = _ended_at
	return twitch_poll


static func from_json(d: Dictionary) -> TwitchPoll:
	var result: TwitchPoll = TwitchPoll.new()
	if d.get("id", null) != null:
		result.id = d["id"]
	if d.get("broadcaster_id", null) != null:
		result.broadcaster_id = d["broadcaster_id"]
	if d.get("broadcaster_name", null) != null:
		result.broadcaster_name = d["broadcaster_name"]
	if d.get("broadcaster_login", null) != null:
		result.broadcaster_login = d["broadcaster_login"]
	if d.get("title", null) != null:
		result.title = d["title"]
	if d.get("choices", null) != null:
		for value in d["choices"]:
			result.choices.append(Choices.from_json(value))
	if d.get("bits_voting_enabled", null) != null:
		result.bits_voting_enabled = d["bits_voting_enabled"]
	if d.get("bits_per_vote", null) != null:
		result.bits_per_vote = d["bits_per_vote"]
	if d.get("channel_points_voting_enabled", null) != null:
		result.channel_points_voting_enabled = d["channel_points_voting_enabled"]
	if d.get("channel_points_per_vote", null) != null:
		result.channel_points_per_vote = d["channel_points_per_vote"]
	if d.get("status", null) != null:
		result.status = d["status"]
	if d.get("duration", null) != null:
		result.duration = d["duration"]
	if d.get("started_at", null) != null:
		result.started_at = d["started_at"]
	if d.get("ended_at", null) != null:
		result.ended_at = d["ended_at"]
	return result



## A list of choices that viewers can choose from. The list will contain a minimum of two choices and up to a maximum of five choices.
## #/components/schemas/Poll/Choices
class Choices extends TwitchData:

	## An ID that identifies this choice.
	@export var id: String:
		set(val): 
			id = val
			track_data(&"id", val)
	
	## The choice’s title. The title may contain a maximum of 25 characters.
	@export var title: String:
		set(val): 
			title = val
			track_data(&"title", val)
	
	## The total number of votes cast for this choice.
	@export var votes: int:
		set(val): 
			votes = val
			track_data(&"votes", val)
	
	## The number of votes cast using Channel Points.
	@export var channel_points_votes: int:
		set(val): 
			channel_points_votes = val
			track_data(&"channel_points_votes", val)
	
	## Not used; will be set to 0.
	@export var bits_votes: int:
		set(val): 
			bits_votes = val
			track_data(&"bits_votes", val)
	
	
	
	## Constructor with all required fields.
	static func create(_id: String, _title: String, _votes: int, _channel_points_votes: int, _bits_votes: int) -> Choices:
		var choices: Choices = Choices.new()
		choices.id = _id
		choices.title = _title
		choices.votes = _votes
		choices.channel_points_votes = _channel_points_votes
		choices.bits_votes = _bits_votes
		return choices
	
	
	static func from_json(d: Dictionary) -> Choices:
		var result: Choices = Choices.new()
		if d.get("id", null) != null:
			result.id = d["id"]
		if d.get("title", null) != null:
			result.title = d["title"]
		if d.get("votes", null) != null:
			result.votes = d["votes"]
		if d.get("channel_points_votes", null) != null:
			result.channel_points_votes = d["channel_points_votes"]
		if d.get("bits_votes", null) != null:
			result.bits_votes = d["bits_votes"]
		return result
	