﻿using UnityEngine;
using System.Collections;

public class Defender : MonoBehaviour {

	public GameObject projectile, gun;
	public int cost = 40;

	private GameObject newParent;
	private Animator animator;
	private Spawner myLaneSpawner;
	private bool obstacle;

	// Use this for initialization
	void Start () {
		newParent = GameObject.Find ("Projectiles");
		if (!newParent) {
			//create one if it isn't there
			newParent = new GameObject("Projectiles");
		}
		if (gameObject.tag != "Obstacle") {
			animator = GetComponent<Animator> ();
		} else {
			obstacle = true;
		}
		MyLaneFinder ();
	}
	
	// Update is called once per frame
	void Update () {
		if (!obstacle) {
			if (EnemyInView ()) {
				animator.SetBool ("enemySighted", true);
			} else {
				animator.SetBool ("enemySighted", false);
			}
		}
	}

	private void Fire () {
		GameObject newProjectile = Instantiate (projectile) as GameObject;
		newProjectile.transform.parent = newParent.transform;
		newProjectile.transform.position = gun.transform.position;
	}

	//This sets the myLaneSpawner for each placed Defender
	void MyLaneFinder (){
		Spawner[] fountainOfGoons = GameObject.FindObjectsOfType<Spawner>();
		foreach (Spawner lane in fountainOfGoons) {
			if (transform.position.y == lane.transform.position.y){
				myLaneSpawner = lane;
				return;
			}
		}
		if (myLaneSpawner == null) {
			Debug.LogError (name +" says, 'I can't find my Lane!'");
		}
	}

	bool EnemyInView(){
		//IS there an attacker in the same lane?
		// Does the Spawner in the corresponding lane have children?
		if (myLaneSpawner.transform.childCount <= 0) {
			return false;
		} else {
			return EnemyInRange ();
		}
	}

	bool EnemyInRange(){
		//is the attacker in the gamespace (core game area)?
		Transform goonSpawner = myLaneSpawner.transform;
		foreach (Transform goon in goonSpawner) {
			float distance = goon.transform.position.x - transform.position.x;
			if(distance > -1f && distance <= 8.75f){
				return true;
			}
		} 
		return false;
	}
}
