using System;
using System.Collections.Generic;
using UnityEngine;

public class ArtistController : MonoBehaviour {
	public int range = 50;
	public int projectileSpeed = 5;
	public GameObject projectile;
	
	private Queue<GameObject> enemyQueue;
	void Start() {
		InvokeRepeating(nameof(fireAttack), 0, 1);
	}

	public void setEnemyQueue(Queue<GameObject> enemyQueueIn) {
		enemyQueue = enemyQueueIn;
	}
	
	// Look through all of the queue, and find the distance between each enemy and the artist.
	// Keep track of the enemy with the lowest distance, and after you have looped through the entire queue,
	// Initiate a new instance of the projectile game object, from the artists position, in the direction of the enemy.
	private void fireAttack() {
		if (enemyQueue.Count == 0) return; // If there are no enemies in the queue, return.
		if (enemyQueue.Peek() == null) return; // If the first enemy in the queue is null, return.
		
		float lowestDistance = range;
		GameObject enemyTarget = null;
		
		foreach (var enemy in enemyQueue) {
			var distance = Vector3.Distance(enemy.transform.position, transform.position);
			if (distance < lowestDistance) {
				lowestDistance = distance;
				enemyTarget = enemy;
			}
		}
		
		if (enemyTarget == null) return; // If there are no enemies in range, return.
		
		//Find the vector that points from the artist to the enemy.
		var heading = enemyTarget.transform.position - transform.position;
		//Find the angle between the artist and the enemy.
		var angle = Mathf.Atan2(heading.y, heading.x) * Mathf.Rad2Deg;
		//Create a quaternion (rotation) based on the angle.
		var q = Quaternion.Euler(0,0,angle);
		var projectileInstance = Instantiate(projectile, transform.position, q);
		projectileInstance.GetComponent<StandardProjectileController>().setSpeed(projectileSpeed);
	}
}