extends RigidBody2D

onready var pickUpArea = $PickUpArea
onready var collision = $PhysicsCollision
export var guestName = "Dieter"
export var  PICKUPTRESHOLD = 100
export var destinationColor = Color.yellow
var pickup_time

signal picked_up(color,name)
signal dropped_off_success 
signal dropped_off_idle
signal dropped_off_fail

var rng = RandomNumberGenerator.new()
onready var exclusionZoneShape = $ExclusionZone/CollisionShape2D
var sprite

var delivered

enum states {
	waiting,
	tethered
}
var colorList = [
	Color.yellow,
	Color.violet,
	Color.red,
	Color.turquoise,
	Color.orange
]
var names = [
	'Dieter',
	'Peter',
	'Gabi',
	'Ursula',
	'Manni',
	'Karl',
	'Christa',
	'Britta'
]
var currentState = states.waiting

var follow_node = null
var follow_pos = global_position

func _physics_process(delta):
	#linear_velocity = linear_velocity.clamped(100)
	if currentState == states.waiting:
		linear_velocity.move_toward(Vector2.ZERO,5.0)
		collision.disabled = false

	elif currentState == states.tethered:
		collision.disabled = true
		mode = RigidBody2D.MODE_STATIC
		var rot_dir = get_angle_to(follow_pos)
		rotation += (rot_dir)
		var distance = follow_pos.distance_to(global_position)
		global_position = (follow_node.global_position) 
		pass

func _process(delta):
	if delivered != null and OS.get_system_time_msecs() - delivered > 10000:
		queue_free()
	if visible == false:
		follow_node = self
		delivered = OS.get_system_time_msecs()
	if follow_node != null:
		if follow_node.visible == false:
			follow_node = self
		if follow_node == self:
			currentState = states.waiting
		else:
			currentState = states.tethered
			follow_pos = follow_node.global_position
	else:
		currentState = states.waiting
		follow_pos = global_position

func _ready():
	rng.randomize()
	var spriteNum = rng.randi_range(0,100)
	if spriteNum % 2 == 0:
		$SpriteMarkus.visible = true
		sprite = $SpriteMarkus
	if spriteNum % 2 != 0:
		$SpriteSam.visible = true
		sprite = $SpriteSam	
	var n = rng.randi_range(0,4)
	destinationColor = colorList[n]
	sprite.modulate = destinationColor
	var m = rng.randi_range(0,names.size()-1)
	guestName = names[m]

func _on_PickUpArea_body_entered(body):
	print(body.name)
	if body.name == "Playa":
		pickup_time = OS.get_system_time_msecs()
		emit_signal("picked_up",destinationColor,guestName)
			# start pickup process
		# we are being picked up by the player
	pass

func _on_PickUpArea_area_entered(area):
	if area.name == "DROPOFF":
		if area.destinationColor == destinationColor:
			emit_signal("dropped_off_success")
		else:
			emit_signal("dropped_off_fail")