extends BuildingPart
class_name Producer

@export var produced_item: Item
@export var output_period: float = 0.1
@export var max_outputs: int = 1
@export var consumers: Array[Consumer]

var last_consumer_idx: int = 0
#var output_timer: float = 0.0
#var output_item: Item

#func _process(delta: float) -> void:
	#output_timer += delta
	#if output_timer >= output_period:
		#output_timer -= output_period
		#output()
func can_produce() -> bool:
	return can_send_item(produced_item)
		
func produce() -> bool:
	return send_item(produced_item)
	
func can_send_item(item: Item) -> bool:
	if !enabled:
		return false
	for consumer in consumers:
		if consumer.can_accept_item(item):
			return true
	return false
		
func send_item(item: Item) -> bool:
	if !enabled:
		return false
	if consumers.is_empty():
		return false
	var start_idx: int = last_consumer_idx
	var first_try: bool = true
	var idx: int = start_idx
	while idx != start_idx or first_try:
		idx += 1
		if idx >= consumers.size():
			idx = 0
		first_try = false
	
		var consumer: Consumer = consumers[idx]
		var accepted: bool = consumer.offer_item(item)
		if accepted:
			last_consumer_idx = idx
			return true
	return false