﻿using UnityEngine;
using System.Collections;

public class DefenderSpawner : MonoBehaviour {

	public Camera myCamera;

	private GameObject defenderParent;
	private MannaCount mannaCount;

	// Use this for initialization
	void Start () {
		defenderParent = GameObject.Find ("Towers");
		if (!defenderParent) {
			defenderParent = new GameObject ("Towers");
		}
		mannaCount = GameObject.FindObjectOfType<MannaCount> ();
		if (mannaCount == null) {
			Debug.LogWarning("Defender Spawner could not find MannaCount");
		}
	}
	
	// Update is called once per frame
	void Update () {
	
	}

	void OnMouseUp (){
		Vector2 gridPos = SnapToGrid (CalculateWorldPointOfMouseClick ());
		int defenderCost = Merch.selectedDefender.GetComponent<Defender> ().cost;
		if (MannaCount.manna >= defenderCost) {
			mannaCount.UseStars(defenderCost);
			SpawnDefender (gridPos);
		} else {
			Debug.Log("Insufficient funds");
		}
	}

	Vector2 SnapToGrid (Vector2 WorldClickPos){
		float clickX = Mathf.RoundToInt(WorldClickPos.x);
		float clickY = Mathf.RoundToInt(WorldClickPos.y);
		return new Vector2(clickX,clickY);
	}

	Vector2 CalculateWorldPointOfMouseClick(){
		float newX, newY, distanceFromCamera = 10f;

		newX = Input.mousePosition.x;
		newY = Input.mousePosition.y;
		Vector3 weirdTriplet = new Vector3 (newX, newY, distanceFromCamera);
		Vector2 worldPos = myCamera.ScreenToWorldPoint (weirdTriplet);

		return worldPos;	
	}

	void SpawnDefender (Vector2 gridPos){
		GameObject newDefender = Instantiate (Merch.selectedDefender, gridPos, Quaternion.identity) as GameObject;
		newDefender.transform.parent = defenderParent.transform;
	}
}
