using UnityEngine;
using System.Collections;

public class PlayerControler : MonoBehaviour {


	public Animator animator;
	// Use this for initialization
	void Start () {	
	}

	public float speed;
	public Vector2 jumpVector;
	public int health = 0;
	private int displayedHealth = 0;
	private bool updateHealth = false;
	private float curDirection = -1;
	public GameObject bullet;
	public GameObject heart;
	bool canJump = true;
	public GameObject newConfetti;



	void Update() {
		Vector2 velo = rigidbody2D.velocity;
		velo.x = Input.GetAxis ("Horizontal_P1") * speed;
		rigidbody2D.velocity = velo;
		animator.SetFloat("Velocity",velo.magnitude);
		animator.SetBool ("Fall", !canJump);
		if (curDirection != Input.GetAxisRaw ("Horizontal_P1"))
			applyPlayerDirection (Input.GetAxisRaw ("Horizontal_P1"));

		if (displayedHealth != health) {
			updateHealth = true;
		}
		if (updateHealth)
			displayHealth (health);

		if (health == 0)
			death();


		if (Input.GetKey (KeyCode.UpArrow)){
			if (canJump == true){
				rigidbody2D.velocity = jumpVector;
				canJump = false;
			}
		}

		//if (Input.GetKey (KeyCode.Space)){
				//shoot
				//GameObject bulletGO = Instantiate (bullet) as GameObject;
				//bulletGO.transform.position = transform.position;
		//}
	}

	private void displayHealth(int health){
		GameObject[] hearts = GameObject.FindGameObjectsWithTag("heartUI2");
		foreach (GameObject desHeart in hearts)
			GameObject.Destroy (desHeart);
		
		for (int i=1; i<= health; i++) {
			GameObject heartCanister = Instantiate (heart) as GameObject;
			Vector3 heartPos = new Vector3 (1-(i * 0.033f), 0.95f, 0);
			heartCanister.transform.position = heartPos;
		}
		displayedHealth = health;
		updateHealth = false;
	}

	private void applyPlayerDirection(float moveHorizontal)
	{
		if (moveHorizontal != 0)
		{
			transform.Rotate(0,180,0);
			curDirection = moveHorizontal;
		}
	}

	private void Confettishoot(Vector3 target,float size){
		Debug.Log ("Creating Confetti");
		
		target.y += 1.5f;
		for (int i = 0; i <size; i++) {
			Instantiate (newConfetti, target, transform.rotation);
		}
	}

	private void death(){
		if (health == 0) {
			Vector3 spawnPos = new Vector3 (Random.Range (-20.0f, 20.0f), 15.0f, 0);
			health = 3;
			transform.position = spawnPos;
			rigidbody2D.velocity = Vector2.zero;
		}
	}

	void OnCollisionEnter2D(Collision2D col){
		if (col.collider.tag == "ground")
			canJump = true;
		else if (col.collider.tag == "Player") {
			canJump = true;
			if(transform.position.y>col.transform.position.y){
				col.gameObject.GetComponent<player2_controls>().health --;
				Confettishoot(col.gameObject.transform.position,20.0f);
				//health --;
				rigidbody2D.velocity = jumpVector;
				canJump = false;
			}

		}
	}

}
