extends Control

func _ready():
	# Let's create our @x values
	var x: Array = ArrayOperations.multiply_float(range(-10, 10, 1), 0.5)
	# And our y values. It can be an n-size array of arrays.
	# NOTE: `x.size() == y.size()` or `x.size() == y[n].size()`
	var y: Array = [
		ArrayOperations.multiply_int(ArrayOperations.cos(x), 20),
		ArrayOperations.add_float(ArrayOperations.multiply_int(ArrayOperations.sin(x), 20), 20)
	]
	# Add some labels for the x axis, we don't want to use our x values array
	# they will be printed on the chart ticks instead of the value of the x axis.
	var x_labels: Array = ArrayOperations.suffix(x, "s")
	
	# Let's customize the chart properties, which specify how the chart
	# should look, plus some additional elements like labels, the scale, etc...
	var cp: ChartProperties = ChartProperties.new()
	cp.grid = true
	cp.origin = false
	cp.title = "Air Quality Monitoring"
	cp.x_label = ("Time")
	cp.x_scale = 10
	cp.y_label = ("Sensor values")
	cp.y_scale = 30
	cp.interactive = true # false by default, it allows the chart to create a tooltip to show point values
	# and interecept clicks on the plot
	
	# Set the x_labels
#	$ScatterChart.x_labels = x_labels
	
	# Plot our data
	$ScatterChart.plot(x, y, cp)
	
	# Uncommenting this line will show how real time data plotting works
	set_process(false)

func _process(delta: float):
	# This function updates the values of chart x, y, and x_labels array
	# and updaptes the plot
	var new_val: float = $ScatterChart.x.back() + 1
	$ScatterChart.x.append(new_val)
	$ScatterChart.y[0].append(cos(new_val) * 20)
	$ScatterChart.y[1].append(20 + sin(new_val) * 20)
	$ScatterChart.x_labels.append(str(new_val) + "s")
	$ScatterChart.update()


func _on_CheckButton_pressed():
	set_process(not is_processing())
